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
