问题描述
依照vue3官网教程上说法,使用interface作类型推断时,可以这样:
interface Post{
content:string,
//...
}
//defineComponent内
props: {
post:Object as PropType<Post>,
//...
},
但是这样之后this.post.content
会被推断为string | undefined
导致不少的开发不便
除了断言外还有其他解决方法吗?
应该不是把
this.post.content
推导为string | undefined
,而是把this.post
推导为Post | undefined
,因为在使用组件的时候,是有可能没给这个 Prop 的。写代码的时候,VSCode 会把
this.post.content
自动修正为this.post?.content
,由于前面加了?.
这个 Optional 操作符,才导致....content
带undefined
类型。如果给
post
的定义带上默认值,this.post
就不会带undefined
类型了,这时候this.post.content
也不会带undefined
,比如但是要注意,如果这里的
default
给了个没有content
的对象:default: { }
,好像不会报错(VSCode 不报,不知道编译的时候会不会报)。如果不报的话就要小心了,因为这种情况下,没有 post 属性的话this.post.content
的实际类型是undefined
,类型检查却检查不出来。