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[] のすべての組み合わせを書き出さないようにする方法があるかどうか疑問に思っています。これは、より多くのパラメーターを持つ関数ではさらに面倒になります。それとも、私がやろうとしていることに根本的な問題がありますか?