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