4

インデクサーを定義するインターフェイスを使用して、システムタイプnumber[]で使用しようとすると問題が発生しました。インターフェイスの理由は、number []と型付き配列インスタンスの両方の場合のように、数値を返すよりも数値インデクサーを持つ任意の型を渡せるようにするためです。

検討:

interface IIndexedNumeric
{
    [index: number]: number;
}

class buffer {
    // ... 
    push(vals: IIndexedNumeric) { ... }
}

// problem usage:
var ary: number[] = [1,2,3];
var foo = new buffer();

foo.push(ary); // error
//  Supplied parameters do not match any signature of call target:
//  Could not apply type 'IIndexedNumeric' to argument 1, which is of type 'number[]'   

これが発生する必要がありますか?number[]は完全に構造的にIIndexedNumericを実装する必要があるようです。私が単に何かを失敗させた場合は、私のエラーを確認するのを手伝ってください。そうでない場合は、回避策を考えていただけますか?

4

2 に答える 2

2

完全にはわかりませんが、これはバグだと思います。仕様では、配列型リテラルは、インデックスシグネチャ[インデックス:数値]:ElementTypeを持つオブジェクト型と同等であると規定されています。ここで、この場合のElementTypeは数値です。配列型には、Array.prototype。*に対応する追加のプロパティがありますが、これは、インデクサーだけとの割り当ての互換性に影響を与えるべきではありません。よろしければ、これについてCodePlexにバグを報告してください。

于 2012-10-25T18:49:16.520 に答える
0

実際に実行すれば完全に機能すると思いますが、技術的には、IIndexedNumericは、非常によく似ていても、number[]とは異なるタイプです。コンパイラが文句を言わないようにするには、おそらくaryをIIndexedNumericにキャストする必要があります。

于 2012-10-25T18:30:48.860 に答える