将类型数组作为任何[]传递?

时间:2013-04-02 16:06:18

标签: javascript knockout.js typescript

为什么我不能将一个类型数组传递给一个带any[]的函数/构造函数?

typedArray = new MyType[ ... ];
items = new ko.observableArray(typedArray);

给我错误:

  

提供的参数与呼叫目标的任何签名

都不匹配

ko.observableArray定义为:

interface KnockoutStatic 
{
    observableArray: KnockoutObservableArrayStatic;
}

interface KnockoutObservableArrayStatic
{
    new(value: any[]): KnockoutObservableArray;
}

declare var ko: KnockoutStatic;

如何将MyType[]作为any[]传递?这是协方差的问题吗?

1 个答案:

答案 0 :(得分:3)

typedArray = new MyType[ ... ];

这不是你在JavaScript或TypeScript中创建一个新数组的方法(在0.9.0中,这将在空数组的情况下正确地成为语法错误)。你应该只能写:

typedArray = [ ... ];

让编译器正确地将类型推断为MyType[]。如果需要,您可以添加类型注释:

typedArray = <MyType[]>[ ... ];