以在vue3中挂载DOM节点为例,先看看一段代码:
因为新版本的@vue/cli脚手架创建出来的项目会默认启用
--strictNullChecks选项,导致上述代码会报错,无法正常运行。(child.value对象可能为null)
原因是:默认情况下null和undefined是所有类型的子类型,开启了strictNullChecks选项之后,会使null和undefined只能赋值给void和它们各自。
有以下几种解决方案可以参考:
-
在涉及到相关操作的时候,对节点变量增加一个判断:
if (child.value) {
// 读取子组件的数据
console.log(child.value.num)
// 执行子组件的方法
child.value.sayHi('ahhhh')
}
- 通过TS的可选符
?来将目标设置为可选,避免出现错误(这个方式不能直接修改子组件数据的值)
// 读取子组件的数据
console.log(child.value?.num)
// 执行子组件的方法
child.value?.sayHi('ahhhh')
- 在项目根目录下的
tsconfig.json文件里,关闭strictNullChecks选项。
{
"compolierOptions": {
"strictNullChecks": false
},
// ...
}
- 使用
any类型来代替,但是写TS还是尽量不要使用any。