我想使用TypeScript来声明带有参数的函数,这些参数可以是常规的JavaScript数组或类型化数组,但我找不到一个好的方法来实现它。我希望像下面这样使用接口:
```typescript
interface MyFunction {
(data: Array | TypedArray): void;
}
```
会让我声明一个函数:
并可以以下任何方式使用它:
“...等。但是,只有第一行在TypeScript playground中有效。其他代码会生成一个错误,指出参数与函数签名不匹配。
但是我想知道是否有办法避免写出所有IArray和number []的组合,对于参数更多的函数来说,这将变得更加乏味。或者我尝试做的事情从根本上有什么问题吗?
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 playground中有效。其他代码会生成一个错误,指出参数与函数签名不匹配。
通过重载该函数可以使其工作:
”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 []的组合,对于参数更多的函数来说,这将变得更加乏味。或者我尝试做的事情从根本上有什么问题吗?
new Array()
也被认为返回any[]
,而不是 Array 的实例。 - duncan