Частный мой транспорт: IVehicle[] | логический;
Проблема: Когда я получаю список транспортных средств из базы данных, я хочу установить для них значение myVehicles или поместить их по отдельности в массив myVehicles. Ошибки TS, потому что myVehicles МОЖЕТ быть логическим значением. "push" не является свойством "логического" Да, я знаю... но это метод для массива...
Я, вероятно, могу покончить с | boolean и переделайте логику, но я вижу это довольно часто и, кажется, должен быть способ обойти это.
if (typeof myVehicles === 'boolean') { ... } else { ... }
?
private myVehicles: IVehicle[] | false;
может быть лучше, если это false
или массив, и это легче сузить тип. Если вы используете объединения типов, вам нужно понять, как сузить до определенного типа, чтобы работать с ним.
Тип объединения позволяет использовать только общие характеристики двух терминов. Единственная общая характеристика между 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.
Использование пустого массива при отсутствии данных было бы мудрым решением. Однако я не вижу причин, по которым мой код не работает для вас. Вы используете старую версию TypeScript? На детской площадке работает? Является ли myVehicles фактическим свойством другого объекта?
Это также работает внутри класса: typescriptlang.org/play?#code/…
Почему вы вводите его как логическое значение в первую очередь. ?