2015-08-13 11 views
7

Mam typ interfejsu o nazwie IRawParams, który po prostu określa klucz string i any vals.Czy mogę zdefiniować klasę maszynopisu, która ma podpis indeksu?

interface IRawParams { 
    [key: string]: any 
} 

Mam klasy, która zawiera pewne ParamValues zachowanie na górze kluczy/wartości. Chciałbym określić, że klasa ParamValues implementuje interfejs IRawParams.

class ParamValues implements IRawParams { 
    parseFromUrl(urlString: string) { 
     Parser.parse(urlString).forEach(item => this[item.key] = item.val); 
    } 
} 

// so I can do something like this 
var params = new ParamValues(); 
params.parseFromUrl(url); 
var userId = params.userId; 

Gdy próbuję to, otrzymuję błąd kompilatora:

error TS2420: Class 'ParamValues' incorrectly implements interface 'IRawParams'. Index signature is missing in type 'ParamValues'.

mogę uzyskać moja klasa zaimplementować interfejs IRawParams, lub w inny sposób zdobyć maszynopis, aby umożliwić przypadki mojej klasie jest zgodny z indeksowany typ {[key: string]: any}?

Odpowiedz

11

Aby zdefiniować klasę z podpisem indeksu, wystarczy napisać podpis indeksu w klasie:

interface IRawParams { 
    [key: string]: any 
} 

class Foo implements IRawParams { 
    [k: string]: any; 
} 
+1

Dzięki! Teraz czuję się jak idiota. Zawijam podpis za pomocą nawiasów klamrowych: '{[key: string]: any}' –

Powiązane problemy