Hvordan fungerer syntaksen for hash-variabelen i TypeScript?


...og hvor er det dokumentert?

Jeg har sett eksempler som dette rundt omkring:

class MyThing {
  private _layers: { [id: string] : SimpleLayer } = {};
  ...
}

...og det fungerer, noe som er flott, men syntaksen er forvirrende for meg.

Hva er 'id'? Hvorfor er ikke syntaksen bare blah:{string:SimpleLayer}, som ikke fungerer. Jeg har også sett {[name: string]:Type} og {[index:string]:Type}.

Jeg har sett gjennom typescriptlang.org og prøvd å finne ut hvor dette faktisk er dokumentert, men jeg ser ut til å ikke finne det i det hele tatt.

Svar #1

TypeScript: Indeks-signaturer

Syntaksen for å definere indeksen er:

{ [Identifier: KeyType]: ValueType }

KeyType kan enten være string eller number.

Du kunne hevde at Identifier egentlig ikke er nødvendig siden det ikke brukes noe sted, men jeg tror det er nødvendig for å tvinge klasse-/grensesnittdesigneren til å indikere hva hashtabellnøkkelen skal representere (en id, navn, e-postadresse, osv.). Dette gir også muligheten for at intellisense viser navnet på hash-nøkkelen (slik Visual Studio gjør for andre språk), selv om jeg ikke tror Typescript intellisense gir dette for øyeblikket.

Svar #2

Når det gjelder spørsmålet ditt om hvorfor syntaksen ikke er enklere, spesielt noe som blah:{string:SimpleLayer}:

Fordi dette ville være tvetydig. Denne syntaksen eksisterer allerede og har en betydning:

var x: { string: SimpleLayer }

Dette erklærer en variabel x. Typen til x har en egenskap, kalt string, som er av typen SimpleLayer. Hvis jeg ønsket å bruke x, ville jeg gjort dette:

x.string = new SimpleLayer;

Det er mer åpenbart hvis vi bruker et ekte eksempel:

var circle: {radius: number}

Dette erklærer en variabel med én egenskap (radius) som er av typen number, det deklarerer ikke et hash-kart som mapper radius-typer til number-typer.

Relaterte artikler