2015-08-13 18 views
7

IRawParams adında bir string anahtar ve any vals değerini belirten bir arabirim var.Bir dizin imzası olan bir Typescript sınıfı tanımlayabilir miyim?

interface IRawParams { 
    [key: string]: any 
} 

Ben bir sınıf, anahtarlar/değerlerin üstünde bazı davranışı içeriyor ParamValues var. ParamValues sınıfının IRawParams arabirimini uygulattığını belirtmek isterim.

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

Ben typescript IRawParams Arayüz uyarlamak ya da başka olsun benim sınıf benim sınıfının örnekleri ile uyumlu olacak şekilde izin alabilir miyim: Bu çalıştığınızda

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; 

, bir derleyici hatası alıyorum endeksli tip {[key: string]: any} mu?

cevap

11

sadece sınıfta endeks imza yazmak, bir indeks imzası ile bir sınıf tanımlamak için:

interface IRawParams { 
    [key: string]: any 
} 

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

Teşekkür! Şimdi aptal gibi hissediyorum. İmzayı kaşlı ayraçlarla sardım: '{[key: string]: any} –

İlgili konular