Почему проверка нуля не допускается при записи массива в Typescript? - PullRequest
3 голосов
/ 11 мая 2019

У меня есть массив объектов, которые могут быть нулевыми или геймпадом:

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

И если первая запись - Геймпад (и не ноль), я хочу выполнить некоторый код

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

Эта нулевая проверка работает, но мне нужно создать дополнительную временную переменную. Есть ли способ просто проверить нулевую первую запись массива напрямую?

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

Аргумент типа 'Геймпад | null 'нельзя назначить параметру типа' Gamepad '. Тип 'null' нельзя назначить типу 'Gamepad'

Мой другой код - это просто функция, которая ожидает геймпад:

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

1 Ответ

1 голос
/ 12 мая 2019

Это ошибка компилятора , в которой типы с сигнатурами индекса (например, массивы) не защищены должным образом при доступе к свойству индекса (с квадратной скобкой).Неясно, когда это будет исправлено (в настоящее время проблема, по состоянию на 11 мая 2019 года, гласит «Milestone: TypeScript 3.5», но эта версия выйдет в ближайшее время, поэтому я сомневаюсь, что веха будет достигнута).Обходной путь, как вы заметили, заключается в присвоении новой переменной и проверке этого.Надеюсь, это поможет;удачи!

...