3

我想使用 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[] 的所有组合,这对于具有更多参数的函数来说会变得更加乏味。或者我正在尝试做的事情是否有根本性的错误?

4

1 回答 1

2

查看可以为 number[] 定义索引器接口吗?

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

于 2012-11-16T04:35:02.260 回答