typescript - Implementer et indekserbart grensesnitt
Hvordan vil jeg implementere et grensesnitt som kan indekseres:
interface fooInterface{
// indexable
[index:string]:number;
[index:number]:number;
}
class Foo implements fooInterface{
// What goes here?
}
Svar #1
Du implementerer det aldri i klasse-definisjonen, men kun ved å adressere instance[index], så din fooInterface kan ikke brukes via implements på en TypeScript-klasse, men kan brukes til å beskrive den forventede strukturen til et objekt, f.eks. var foo: fooInterface={};
Beskriver et indekserbart objekt
Et vanlig mønster i JavaScript er å bruke et objekt (f.eks. {}) som en måte å kartlegge fra et sett med strenger til et sett med verdier. Når disse verdiene har samme type, kan du bruke et grensesnitt for å beskrive at indeksering i et objekt alltid gir verdier av en bestemt type (i dette tilfellet, Widget).
interface WidgetMap {
[name: string]: Widget;
}
var map: WidgetMap = {};
map['gear'] = new GearWidget();
var w = map['gear']; // w is inferred to type Widget
Eksempel på sitat og widget hentet fra: http://blogs.msdn.com/b/typescript/archive/2013/01/24/interfaces-walkthrough.aspx
