Введите «массив | boolean' не будет разрешать методы массива, потому что это может быть логическое значение

Частный мой транспорт: IVehicle[] | логический;

Проблема: Когда я получаю список транспортных средств из базы данных, я хочу установить для них значение myVehicles или поместить их по отдельности в массив myVehicles. Ошибки TS, потому что myVehicles МОЖЕТ быть логическим значением. "push" не является свойством "логического" Да, я знаю... но это метод для массива...

Я, вероятно, могу покончить с | boolean и переделайте логику, но я вижу это довольно часто и, кажется, должен быть способ обойти это.

Почему вы вводите его как логическое значение в первую очередь. ?

Matthieu Riegler 10.01.2023 18:48
if (typeof myVehicles === 'boolean') { ... } else { ... }?
Pieterjan 10.01.2023 18:50
private myVehicles: IVehicle[] | false; может быть лучше, если это false или массив, и это легче сузить тип. Если вы используете объединения типов, вам нужно понять, как сузить до определенного типа, чтобы работать с ним.
crashmstr 10.01.2023 19:35
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
1
3
114
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Тип объединения позволяет использовать только общие характеристики двух терминов. Единственная общая характеристика между Boolean и Array — это Object.prototype.valueOf. Чтобы правильно использовать эту переменную, просто используйте анализ потока управления и обработайте два случая отдельно:

interface IVehicle { }

declare const myVehicles: IVehicle[] | boolean;

if (typeof myVehicles === 'boolean') {
  // Here you can handle the boolean case
} else {
  // Here you can handle the IVehicle[] case
}

Площадка TypeScript

// Здесь вы можете обрабатывать вещи IVehicle... Если я попробую myVehicles.push(IVehicleArray), TypeScript все равно выдаст ошибку, говоря, что это может быть логическое значение. Я думаю, что мне просто нужно будет использовать пустой массив, когда нет данных, а не false или null.

James 10.01.2023 19:33

Использование пустого массива при отсутствии данных было бы мудрым решением. Однако я не вижу причин, по которым мой код не работает для вас. Вы используете старую версию TypeScript? На детской площадке работает? Является ли myVehicles фактическим свойством другого объекта?

Guerric P 10.01.2023 19:41

Это также работает внутри класса: typescriptlang.org/play?#code/…

Guerric P 10.01.2023 19:48

Другие вопросы по теме