Как сделать type guard для массива?
Есть массив, который может быть двух типов, например I1[] | I2[] (интерфейсы).
Как правильно описать функцию isI1, если массив может быть пустым, а тип проверить нужно (также тип можно передать женериком, но я пока не смог разобраться, как это использовать для гуарда)
export function isI1<T>(
paths: I1[] | I2[] | T[] //Может быть пустым
): paths is I1[] {
return
}
Ответы (1 шт):
Автор решения: sailybra
→ Ссылка
По пустому массиву нельзя понять какого он типа, но это и не нужно. С точки зрения структурной типизации [] является подмножеством любого массива, поэтому верным будет реализовать тайпгард так:
function isI1(value: I1[] | I2[]): value is I1[] {
if (value.length == 0) return true
// Далее проверка для первого элемента
}