Destrukturering av valfria egenskaper i Typescript
Anta att jag har ett objekt med valfria egenskaper av denna typ av form
interface MyObject {
requiredProp: SomeType;
optionalProp?: {
innerData: {
innerProp1: string;
innerProp2: number;
innerProp3?: boolean;
}
}
}
const obj:MyObject = { ... }
Men det verkar som att jag inte enkelt kan destrukturera det optionalProp
const {innerProp1, innerProp2, innerProp3} = obj.optionalProp?.innerData;
eftersom
Egenskapen 'innerProp1' finns inte på typen '... | undefined'.
och samma för resten av de destrukturerade variablerna.
Finns det ett elegant och kort sätt att göra detta på samtidigt som typ säkerheten behålls?
Svar #1
Du kan använda det tomma objektet som en reserv.
const {innerProp1, innerProp2, innerProp3} = obj.optionalProp?.innerData ?? {};
Men du bör komma ihåg att kontrollera att varje innerProp inte är odefinierad innan du använder den.
Svar #2
Förutom de andra korrekta svaren kan detta också hanteras på några andra sätt...
- Genom att ge ett värde så att destrukturering kan tillfredsställas i fallet
undefinedellernull
const { innerProp1, innerProp2, innerProp3 } = obj.optionalProp?.innerData || {};
- Genom att göra en
null-ness-kontroll avoptionalPropinnan destrukturering.
if (obj.optionalProp) {
const { innerProp1, innerProp2, innerProp3 } = obj.optionalProp?.innerData;
}
