web-dev-qa-db-fra.com

Implémentation d'un indexeur dans une classe dans TypeScript

Est-il actuellement possible d'implémenter un indexeur sur une classe dans TypeScript?

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

Cela ne compile pas. Je peux bien sûr spécifier un indexeur sur une interface, mais j'ai besoin de méthodes sur ce type ainsi que sur l'indexeur, donc une interface ne suffira pas.

Merci.

28
MgSam

Vous ne pouvez pas implémenter une classe avec un indexeur. Vous pouvez créer une interface, mais cette interface ne peut pas être implémentée par une classe. Il peut être implémenté en JavaScript brut, et vous pouvez spécifier des fonctions ainsi que l'indexeur sur l'interface:

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

C'est une vieille question, pour ceux qui recherchent la réponse: il est maintenant possible de définir une propriété indexée comme:

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

la signature de la clé doit être une chaîne ou un entier voir:

Interfaces sur www.typescriptlang.org

8
Arjan