Strongly typing props of vue components using composition api and typescript typing system
Troy Kessier's answer is not entirely accurate. I quote the documentation on definecomponent
:
Alternatively if your component does not use any option other than setup itself, you can pass the function directly […]
So there are not two ways of declaring properties, but rather two ways of declaring a component, and each of them provides its own way of typing props.
With the classic way and TypeScript, use PropType
:
import { defineComponent, PropType } from 'vue'
export default defineComponent({
props: {
someOptionalString: String,
someRequiredString: {
type: String,
required: true
},
someObject: {
type: Object as PropType<MyObjectType>,
required: true
},
},
// …
})
Notice: PropType
helps to give a correct TypeScript type to the props
parameter in the setup
function. But the underlying Vue type for the props remains Object
and there is currently no way to enforce a better typing for these props passed by the parent component.