使用严格的空值检查编译TypeScript时,即使它没有问题,下面也不会键入check:
const arr: number[] = [1, 2, 3]
const f = (n: number) => { }
while (arr.length) {
f(arr.pop())
}
编译错误是:
类型'数字|的参数undefined'不能赋值给参数 'number'类型。类型'undefined'不能分配给类型 '编号'
似乎编译器不够聪明,不知道arr.pop()
肯定会返回一个数字。
有些问题:
Re 2,我能想到的最好的方法是在循环体上添加一个多余的检查:
while (arr.length) {
const num = arr.pop()
if (num) { // make the compiler happy
f(num)
}
}
答案 0 :(得分:3)
是的,将这种智能添加到编译器被认为是困难的,请参阅this comment关于描述问题的非常确切的问题。
同时,您可以使用non-null assertion - postfix !
- 告诉编译器您知道该值不为null:
const arr: number[] = [1, 2, 3]
const f = (n: number) => { }
while (arr.length) {
f(arr.pop()!)
}