我有一个可以为 null 或游戏 handle 的对象数组:
let pads : (Gamepad | null)[] = navigator.getGamepads()
如果第一个条目是游戏 handle (而不是 null),我想执行一些代码
let pad: Gamepad | null = gamepads[0]
if (pad) {
myOtherCode(pad)
}
这个 null 检查有效,但我必须创建一个额外的临时变量。有没有办法直接对数组的第一个条目进行空检查?
if (gamepads[0]) {
myOtherCode(gamepads[0])
}
Argument of type 'Gamepad | null' is not assignable to parameter of type 'Gamepad'. Type 'null' is not assignable to type 'Gamepad'
我的其他代码只是一个需要游戏 handle 的函数:
function myOtherCode(g:Gamepad) {
console.log(g)
}
最佳答案
这是一个 compiler bug其中具有索引签名的类型(如数组)在索引属性访问(使用方括号)上没有得到正确的类型保护。目前尚不清楚何时会修复此问题(截至 2019 年 5 月 11 日,该问题显示为“里程碑:TypeScript 3.5”,但该版本将很快推出,所以我有点怀疑能否实现里程碑)。正如您所注意到的,解决方法是分配给一个新变量并检查它。希望有所帮助;祝你好运!
关于typescript - 为什么不允许对 Typescript 中的数组条目进行空检查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56093068/