我试着写一些像这样的代码:
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?
答案 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