javascript - 涵盖 Array 和 Typed Arrays 的 TypeScript 接口(interface)

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

最佳答案

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

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

关于javascript - 涵盖 Array 和 Typed Arrays 的 TypeScript 接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13409987/

相关文章:

javascript - 为什么变量 'name' 在第一次使用后不需要初始化 [Javascript]

java - 将数据文件输入字符串数组

javascript - 对象的方法可以将要恢复的对象本身的名称存储为 JavaScript 中的字符串吗?

azure - 在 azure git 部署中包含 TypeScript 文件

angular - 如果数据加载仍在使用 rxjs 进行,如何返回数据或等待

javascript - div 颜色在 .animate() 中没有改变

javascript - 由 laravel 发送的数组在我从 javascript 使用它时变得向后

javascript - 带有 React-Native 和 mapStateToProps 的 Redux

PHP 循环遍历数组获取值

TypeScript Compiler API 如何设置 Lib?