1

これをコンパイルしようとしています:

interface ListInterface {
    getObject(index: number): Object;
    [index: number]: Object;
}

class List123 implements ListInterface {
    private list: Object[] = [1,2,3];
    getObject(index: number) { return this.list[index] }
    [index: number] { return this.getObject(index) }
}

しかし、tscは放出しています:

[ ] メソッド宣言のクラス定義に予期しない '[' があります。

Typescript Playground リンク(私が抱えている問題の //? のコメントを外してください)

4

1 に答える 1

5

JavaScript の動作を定義するためにいくつかの型注釈があり、実装できません。インデクサー注釈はそのような例の 1 つです。

関連する codeplexの議論を参照してください。

質問で提供されているコード サンプルについては、JavaScript オブジェクトが当然インデクサー表記をサポートしているため、部分的な解決策があります。したがって、次のように書くことができます。

interface ListInterface {
    getObject(index: number): Object;
}

class List123 implements ListInterface {

    getObject(index: number) { 
        return <Object> this[index] 
    }
}

var list  = new List123();
list[1] = "my object";

console.log(list[1]); // "my object"
console.log(list.getObject(1)); // "my object";
于 2013-02-10T13:14:25.297 に答える