@GaserV

Как проверить что массив из Foo или Bar?

Такая задачка. Как понять что у пришел массив из Foo или Bar? Видел варианты реализации через итерацию массива, но возможно ли как то понять это без итерации?

export interface Foo {};
export interface Bar {};

export const someFn = (array: (Foo|Bar)[] ) => {
   const ifFooArray = ... ?
}
  • Вопрос задан
  • 46 просмотров
Пригласить эксперта
Ответы на вопрос 1
bingo347
@bingo347 Куратор тега TypeScript
Crazy on performance...
Для начала, в TS структурная типизация, что значит что типы определяются по содержимому а не по объявлению как в номинальной.
Под тип пустого интерфейса подходит всё кроме null и undefined. И как правильно отметил WbICHA в комментариях, данные интерфейсы полностью эквивалентны.

Допустим, что Foo и Bar всё же содержат в своем описании какие-либо поля, и это разные типы. Тогда тип (Foo|Bar)[] позволит передать в себя массив, каждый элемент которого может быть как Foo так и Bar. Проверить тип всех элементов можно лишь пройдя итерацией весь массив.
Если хотим, чтоб все элементы массива были одного типа, только Foo или только Bar, то нужно принимать такой аргумент Foo[] | Bar[], в этом случае достаточно проверки элемента с индексом 0.
Ну и наконец любая вариация этих типов допускает пустой массив, из которого тип элементов определить невозможно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
01 мая 2024, в 02:11
5000 руб./за проект
01 мая 2024, в 00:29
2000 руб./за проект
01 мая 2024, в 00:20
15000 руб./за проект