const propsType = {
age: {
type: Number,
required: true
}
}
export default deineComponent({
name: 'HelloWorld',
props: PropsType,
mounted() {
this.age // 类型为number || undefined
}
})
解决方法:在定义props类型后加上as const
const propsType = {
age: {
type: Number,
required: true
}
} as const;
原因: PropsOptions 继承只读类型的ComponentPropsOptions,而ts中required:true是被认为在这个对象上是必须的,所以会被消除掉
https://github.com/vuejs/vue-next/blob/master/packages/runtime-core/src/apiDefineComponent.ts