2015-08-13 3 views
7

Ich habe eine Schnittstelle Typ IRawParams, die einfach einen string Schlüssel und any Vals spezifiziert.Kann ich eine Typescript-Klasse definieren, die eine Index-Signatur hat?

interface IRawParams { 
    [key: string]: any 
} 

Ich habe eine Klasse, ParamValues, die auf der Oberseite der Tasten/Werte ein bestimmtes Verhalten enthält. Ich möchte angeben, dass die ParamValues Klasse implementiert Schnittstelle.

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; 

Wenn ich dies versuchen, erhalte ich einen Compiler-Fehler:

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

Kann ich meine Klasse bekommen die IRawParams Schnittstelle zu implementieren, oder sonst Typoskript erhalten Instanzen meiner Klasse zu ermöglichen, mit kompatibel zu sein ein indizierter Typ {[key: string]: any}?

Antwort

11

Um eine Klasse mit einem Index Signatur zu definieren, nur den Index Signatur in der Klasse schreiben:

interface IRawParams { 
    [key: string]: any 
} 

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

Dank! Jetzt fühle ich mich wie ein Idiot. Ich wickelte die Signatur mit geschweiften Klammern: '{[key: string]: any}' –

Verwandte Themen