TypeScript接口,用于覆盖Array和Typed Arrays

时间:2012-11-16 03:35:44

标签: javascript arrays typescript typed-arrays

我想使用TypeScript来声明具有参数的函数,这些参数可以是常规JavaScript数组或类型数组,但我找不到一个很好的方法来实现它。我希望有一个界面,如:

interface IArray
{
    length: number;
    [index: number]: number;
};

让我宣布一个函数:

declare var vAdd: { (a: IArray, b: IArray): IArray; };

并以下列任何一种方式使用它:

var y;
y = vAdd(new Float32Array([1,2,3]), new Float32Array([1,2,3]));
y = vAdd([1,2,3], new Float32Array([1,2,3]));
y = vAdd(new Float32Array([1,2,3]), new Array(1,2,3));

......等但是,这里只有第一行有效(至少在TypeScript游乐场中)。其他人生成错误,说明参数与函数签名不匹配。

通过重载功能,可以使其工作:

declare var vAdd: { (a: IArray, b: IArray): IArray;
                    (a: number[], b: IArray): IArray;
                    (a: IArray, b: number[]): IArray; 
                    (a: number[], b: number[]): IArray; };

但是我想知道是否有办法可以避免写出IArray和number []的所有组合,这对于具有更多参数的函数来说会更加繁琐。或者我正在尝试做什么根本上是错的?

1 个答案:

答案 0 :(得分:2)

查看Possible to define indexer interface for number[]?

当前的ts版本中存在一个错误,它不允许索引器接口按照预期对本机对象数组进行编译和工作。