Im playing along with the new Vue plugin for using composition API and TypeScript and there is something I'm not quite understanding.
How am I supposed to type computed properties?
import Vue from 'vue' import { ref, computed, Ref } from '@vue/composition-api' export default Vue.extend({ setup(props, context) { const movieName:Ref<string> = ref('Relatos Salvajes') const country:Ref<string> = ref('Argentina') const nameAndCountry = computed(() => `The movie name is ${movieName.value} from ${country.value}`); return { movieName, country, nameAndCountry } } })
In this simple example I'm declaring two refs and a computed property to join both. VSC is telling me that computed properties are returning ReadOnly
type... But I can't make it work.
You define a prop named disabled in MyComponent. vue . ... and then add the component like this, passing in disabled . Note that :disabled="true" and just disabled mean the same thing in both cases - when props are defined or not.
Computed properties are another powerful feature from Vue that allows us to transform or perform calculations on our data and then easily reuse the result as an up-to-date variable in our template. Computed properties are very useful and should replace complex in-template expressions.
There are two different types for that.
If your computed prop is readonly:
const nameAndCountry: ComputedRef<string> = computed((): string => `The movie name is ${movieName.value} from ${country.value}`);
if it has a setter method:
const nameAndCountry: WritableComputedRef<string> = computed({ get(): string { return 'somestring' }, set(newValue: string): void { // set something }, });
I believe you should go with using generics:
const movieName = ref<string>("Relatos Salvajes") const country = ref<string>("Argentina") const nameAndCountry = computed<string>( () => `The movie name is ${movieName.value} from ${country.value}` )
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With