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) //''

Relaterte artikler