为什么在Typescript中不允许对数组条目进行空检查?

时间:2019-05-11 18:14:05

标签: typescript types nullable

我有一个可以为null或游戏手柄的对象数组:

let pads : (Gamepad | null)[] = navigator.getGamepads()

如果第一个条目是游戏手柄(而不是null),我想执行一些代码

let pad: Gamepad | null = gamepads[0]
if (pad) {
     myOtherCode(pad)
}

此null检查有效,但我必须创建一个额外的临时变量。有没有一种方法可以直接对数组的第一个条目进行空检查?

if (gamepads[0]) {
     myOtherCode(gamepads[0])
}
  

“游戏手柄”类型的参数| “ null”不可分配给“ Gamepad”类型的参数。     类型“ null”不可分配给类型“ Gamepad”

我的其他代码只是需要游戏手柄的功能:

function myOtherCode(g:Gamepad) {
    console.log(g)
}

1 个答案:

答案 0 :(得分:1)

这是compiler bug,其中带有索引签名的类型(如数组)在索引属性访问(带有方括号)中的类型不正确。尚不清楚何时修复此问题(截至2019年5月11日,当前问题为“ Milestone:TypeScript 3.5”,但该版本即将发布,因此我怀疑是否会实现这一里程碑)。您注意到,解决方法是分配给新变量并进行检查。希望能有所帮助;祝好运!