web-dev-qa-db-ja.com

TypeScriptのクラスにインデクサーを実装する

TypeScriptのクラスにインデクサーを実装することは現在可能ですか?

class MyCollection {
   [name: string]: MyType;       
}

これはコンパイルされません。もちろん、インターフェイスでインデクサーを指定できますが、このタイプのメソッドとインデクサーが必要なので、インターフェイスでは不十分です。

ありがとう。

28
MgSam

インデクサーを使用してクラスを実装することはできません。インターフェースを作成できますが、そのインターフェースをクラスで実装することはできません。プレーンなJavaScriptで実装でき、インターフェイスで関数とインデクサーを指定できます。

class MyType {
    constructor(public someVal: string) {

    }
}

interface MyCollection {   
   [name: string]: MyType;
}

var collection: MyCollection = {};

collection['First'] = new MyType('Val');
collection['Second'] = new MyType('Another');

var a = collection['First'];

alert(a.someVal);
30
Fenton

これは古い質問です。答えを探している人にとっては、次のようなインデックス付きプロパティを定義することが可能です。

let lookup : {[key:string]:AnyType};

キーの署名は文字列または整数のいずれかである必要があります:

www.typescriptlang.orgのインターフェイス

8
Arjan