Задать вопрос
@GaserV

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

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

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

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

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

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

Похожие вопросы