Vue3中关于使用interface的问题
问题描述
依照vue3官网教程上说法,使用interface作类型推断时,可以这样:
interface Post{
content:string,
//...
}
//defineComponent内
props: {
post:Object as PropType<Post>,
//...
},
但是这样之后this.post.content
会被推断为string | undefined
导致不少的开发不便
除了断言外还有其他解决方法吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
应该不是把
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
,类型检查却检查不出来。// type Guard
if(this.post.content) {
}
或者给content设置一个默认值
this.post.content
会被推断为string | undefined
我觉得的挺好的,强制你去做数据类型校验,提前发现一些问题,避免项目运行时出现bug;试想一下,如果是vue2中没有类型校验,你可能直接就会用this.post.content,如果content没有传递过来或者content是从后端请求数据,但是后端那边没有正确返回content,最终导致xxx is undefined或者xxx is not funtion等错误