如果我使用(严格的空判断)类型脚本,并且我有一些代码可能带有空变量:
let x = null;
if (someCondition) {
x = { a: 1 };
}
doSomethingWith(x.a);
不出所料,我收到了一个错误:
"x"可能为"Null".
我可以用一张null
英镑的支票来修正这个错误:
if (!x) return;
doSomethingWith(x.a);
但后来我得到了:
类型‘Never’上不存在属性‘a’.
实际上,我想写的不是if
/return
,而是assert
呼叫:
const assert = value => { if (!value) throw Error(); }
assert(x);
doSomethingWith(x.a);
...但这并不能消除第一个错误.
我想我可以用以下方法修复第二个错误:
(rootGroup as {id: number}).id
但我不确定这是否是最简单的解决方案,而且它仍然不能解决使用assert
函数的问题.
我的问题是,我怎么才能...?
- 创建一个"可能为空"的变量
- 运行一个证明它不为空的函数(如果为空则抛出错误)
- 添加(尽可能少的)打字代码,然后
- 使用该变量,没有任何TS错误