gpt4 book ai didi

javascript - TypeScript 空检查不注意 array.length 检查

转载 作者:搜寻专家 更新时间:2023-10-30 21:28:02 24 4
gpt4 key购买 nike

当使用严格的 null 检查编译 TypeScript 时,下面的代码即使没问题也不会进行类型检查:

const arr: number[] = [1, 2, 3]
const f = (n: number) => { }
while (arr.length) {
f(arr.pop())
}

编译错误为:

Argument of type 'number | undefined' is not assignable to parameter of type 'number'. Type 'undefined' is not assignable to type 'number'.

看来编译器不够聪明,不知道 arr.pop() 肯定会返回一个数字。

一些问题:

  1. 为什么编译器不更聪明?为这种情况添加更智能的空值检查会不会非常困难,或者 TS 团队尚未实现的事情是否简单明了?
  2. 编写上面仍然进行类型检查的最惯用的方法是什么?

关于 2,我能想到的最好办法是在循环体中添加一个多余的检查:

while (arr.length) {
const num = arr.pop()
if (num) { // make the compiler happy
f(num)
}
}

最佳答案

是的,将这种智能添加到编译器被认为是困难的,请参阅 this comment关于描述您的问题的确切问题。

与此同时,您可以使用 non-null assertion - 后缀 ! - 告诉编译器您知道该值不为空:

const arr: number[] = [1, 2, 3]
const f = (n: number) => { }
while (arr.length) {
f(arr.pop()!)
}

关于javascript - TypeScript 空检查不注意 array.length 检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49663314/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com