javascript - Hvordan kan jeg kombinere destruktureringsoppgave og valgfri kjeding?
Jeg har et TypeScript-grensesnitt med noen valgfrie felt og en variabel av den typen:
interface Foo {
config?: {
longFieldName?: string;
}
}
declare let f: Foo;
Jeg vil gjerne legge longFieldName i en variabel med samme navn.
Hvis config ikke var valgfri, ville jeg brukt destruktureringstildeling for å gjøre dette uten å gjenta longFieldName. Men den er valgfri, så jeg får en typefeil:
const { longFieldName } = f.config;
// ~~~~~~~~~~~~~ Property 'longFieldName' does not exist on type '{ longFieldName?: string | undefined; } | undefined'.
Jeg kan bruke valgfri kobling for kortfattet å håndtere undefined-tilfellet:
const longFieldName = f?.config.longFieldName; // OK, type is string | undefined
Men nå må jeg gjenta longFieldName.
Kan jeg både ha kaken min og spise den også? Kan jeg bruke valgfrie kjeder for å håndtere undefined-tilfellet uten å gjenta longFieldName? Hvis ikke, hva er den mest konsise/idiomatiske løsningen? Se lenken til lekeplassen.
Svar #1
Bruk kortslutningsevaluering for å få en reserveverdi (tomt objekt) hvis f?.config-uttrykket evalueres til undefined:
const { longFieldName } = f?.config || {};
Svar #2
Du kan bruke standardverdiene.
const Foo = {}
const { config: { longFieldName = "" } = {} } = Foo
console.log(longFieldName) //''
