我有一个可以为空或游戏板的对象数组:

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

如果第一个条目是gamepad(而不是null),我想执行一些代码
let pad: Gamepad | null = gamepads[0]
if (pad) {
     myOtherCode(pad)
}

这个空检查有效,但我必须创建一个额外的临时变量。有没有办法直接空检查数组的第一个条目?
if (gamepads[0]) {
     myOtherCode(gamepads[0])
}

“GAMEPAD-null”类型的参数不可分配给“GAMEPAD”类型的参数。
类型“null”不能分配给类型“gamepad”
我的另一个代码只是一个需要游戏板的函数:
function myOtherCode(g:Gamepad) {
    console.log(g)
}

最佳答案

这是一个compiler bug类型,其中具有索引签名(如数组)的类型在索引属性访问时没有得到正确的类型保护(使用方括号)。目前还不清楚这将是什么时候(目前的问题,截至5月11日2019),“MiStest:TimeScript 3.5”,但该版本即将推出,所以我怀疑这一里程碑将实现。正如您所注意到的,解决方法是分配给一个新变量并检查它。希望有帮助,祝你好运!

10-07 16:22