Är detta en ordbok eller en hashtabell i Typescript?


Följande kod är från ett ngrx-exempel.

Vad kommer denna deklaration att göra? Är detta motsvarande en dictionary eller hashtable i C#?

let typeCache: { [label: string]: boolean } = {};

Den ursprungliga koden:

let typeCache: { [label: string]: boolean } = {};

export function type<T>(label: T | ''): T {
  if (typeCache[<string>label]) {
    throw new Error(`Action type "${label}" is not unique"`);
  }

  typeCache[<string>label] = true;

  return <T>label;
}

Svar #1

Jag är inte säker på motsvarigheten i C#, men vad det betyder i TypeScript är ett vanligt JavaScript-objekt med booleska egenskaper, och det kallas Indexerbara typer.
Nycklarna kan bara vara strängar eller nummer, detta kommer inte att kompileras:

let typeCache: { [label: Date]: boolean } = {}; // error: An index signature parameter type must be 'string' or 'number'

Exempel på hur ett värde skulle se ut:

type Indexable = { [label: string]: boolean };

let typeCache1: Indexable = { a: true, b: false };
let typeCache2: Indexable = { a: true, b: "string" }; // error: Type '{ a: true; b: "string"; }' is not assignable to type 'Indexable'

Svar #2

detta är en karta i javascript, en enkel nyckel/värde-karta. för detaljer, se här.

Relaterade artiklar