打字稿:如何映射联合数组类型?

时间:2018-03-27 10:44:38

标签: javascript typescript

我有以下结构:

interface Test1 {
    number: number;
}
interface Test2 extends Test1 {
    text: string;
}

let test: Test1[] | Test2[] = [];
test.map(obj => {}); // does not work

我收到错误:

  

无法调用类型缺少调用签名的表达式。键入'{(this:[Test1,Test1,Test1,Test1,Test1],callbackfn :( this:void,value:Test1,index:nu ...'没有兼容的呼叫签名

我如何map超过测试变量?

1 个答案:

答案 0 :(得分:14)

问题是对于union类型,作为函数的成员也将被输入为union类型,因此map的类型将是(<U>(callbackfn: (value: Test1, index: number, array: Test1[]) => U, thisArg?: any) => U[]) | (<U>(callbackfn: (value: Test2, index: number, array: Test2[]) => U)就typecript而言,它是不可调用的。

您可以声明Test1Test2

的联合数组
let test: (Test1 | Test2)[] = [];
test.map(obj => {}); 

或者,您可以在拨打电话时使用类型断言:

let test: Test1[] | Test2[] = [];
(test as Array<Test1|Test2>).map(o=> {});