2013-02-12 17 views
17

È attualmente possibile implementare un indicizzatore su una classe in TypeScript?Implementazione di un indicizzatore in una classe in TypeScript

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

Questo non viene compilato. Posso specificare un indicizzatore su un'interfaccia, ovviamente, ma ho bisogno di metodi su questo tipo e dell'indicizzatore, quindi un'interfaccia non è sufficiente.

Grazie.

+1

No: vedere http://typescript.codeplex.com/discussions/398379 e http://stackoverflow.com/questions/14791550/how-to-implement-array-signature-method-in-typescript e – MiMo

risposta

23

Non è possibile implementare una classe con un indicizzatore. È possibile creare un'interfaccia, ma tale interfaccia non può essere implementata da una classe. Può essere implementato in pianura JavaScript, ed è possibile specificare funzioni, nonché l'indicizzatore sull'interfaccia:

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); 
5

Questa è una vecchia questione, per chi cerca la risposta: ora è possibile definire una proprietà indicizzata come:

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

la firma della chiave deve essere o stringa o intero veda:

Interfaces on www.typescriptlang.org

Problemi correlati