Typescript använder hakparenteser för att komma åt valfria egenskaper på ett objekt


Jag har ett objekt, som är av typen definierad där:

interface IObject extends IIndexable {
  foo?: string;
  foo2?: string;
  foo3?: string;
}

Min IIndexable ser ut så här:

interface IIndexable {
  [key: string]: string;
}

Jag vill komma åt dess egenskaper med hakparentesnotation som detta:

let object: IObject = {};
object["foo"] = "bar"; 

Problemet är att nyckeln som definieras i IIndexable bara kan vara av typen string eller number och eftersom mina objekts nycklar alla är valfria, är de av typen string | undefined. Felmeddelandet jag får är:

Egenskapen 'fullName' av typen 'string | undefined' kan inte tilldelas till strängindex-typen 'string'.

Jag kan inte göra mina objekts nycklar icke-valfria, eftersom mitt objekt ibland kan vara tomt. Jag försökte också göra objektens typ IObject | {}, men på det sättet kan jag fortfarande inte nå dess egenskaper.

Finns det något sätt att lösa detta?

Svar #1

Du kan definiera en typalias (istället för ett interface) och använda snitt med IIndexable:

type IObject = IIndexable & {
  foo?: string;
  foo2?: string;
  foo3?: string;
}

Lekplats

Relaterade artiklar