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

Relaterte artikler