#typescript
#typescript
Вопрос:
Я пытался написать такой код:
const x: string[] | string[][] = blah();
if (Array.isArray(x[0])) {
// I expect x to be inferred to be string[][] here, but it's not!
}
Почему это не означает x
, что это 2D-массив? Я делаю что-то не так, или это TypeScript?
Ответ №1:
не существует способов ввести guard для этих конкретных объединений. Тем не менее, вы можете довольно легко создать пользовательскую функцию защиты типа:
/** Custom type guard */
const isArrayArray = (x): x is string[][] => Array.isArray(x[0]);
const x: string[] | string[][] = [];
if (isArrayArray(x)) {
// x:string[][]
x;
}
Еще
здесь рассматриваются пользовательские защиты: https://basarat.gitbooks.io/typescript/content/docs/types/typeGuard.html