如何在TypeScript中对2D数组进行保护?

时间:2016-10-01 22:43:08

标签: 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是一个二维数组呢?我做错了什么,或者是TypeScript?

1 个答案:

答案 0 :(得分:1)

没有办法打电话给那些特定的工会。这就是说你可以很容易地创建一个自定义类型保护功能:

/** 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