解决某个值可能为null时,TS编译报错问题

5,343 阅读1分钟

在vue3中挂载DOM节点为例,先看看一段代码:

5599EE37-7E96-4262-BA4D-77B9D0847833.png 因为新版本的@vue/cli脚手架创建出来的项目会默认启用--strictNullChecks选项,导致上述代码会报错,无法正常运行。(child.value对象可能为null

原因是:默认情况下nullundefined是所有类型的子类型,开启了strictNullChecks选项之后,会使nullundefined只能赋值给void和它们各自。

有以下几种解决方案可以参考:

  1. 在涉及到相关操作的时候,对节点变量增加一个判断:

if (child.value) {
    // 读取子组件的数据
    console.log(child.value.num)
    // 执行子组件的方法
    child.value.sayHi('ahhhh')
}
  1. 通过TS的可选符?来将目标设置为可选,避免出现错误(这个方式不能直接修改子组件数据的值)
// 读取子组件的数据
console.log(child.value?.num)
// 执行子组件的方法
child.value?.sayHi('ahhhh')
  1. 在项目根目录下的tsconfig.json文件里,关闭strictNullChecks选项。
{
    "compolierOptions": {
        "strictNullChecks": false
    },
    // ...
}
  1. 使用any类型来代替,但是写TS还是尽量不要使用any