typescript - Hvordan betinget sette valgfrie egenskaper


Finnes det en forkortet måte å betinge innstilling av en valgfri egenskap på?

La oss si at jeg har dette grensesnittet:

interface MyInterface {
    someProp?: string;
    someOtherProp: string;
}

Hvis jeg betinger å sette egenskapen, må jeg velge mellom en verdi og undefined. Men hvis jeg ikke setter en verdi, vil jeg ikke ha egenskapen der i det hele tatt. For øyeblikket er den eneste måten jeg kan tenke meg dette:

let object: MyInterface = {
    someOtherProp: "asd"
};
if (someCondition) object.someProp = "asdf";

Jeg ser etter noe i denne retningen:

let object: MyInterface = {
    someProp: someCondition ? "asdf"
}

Svar #1

Det finnes en måte å bruke egenskaps-spredningsnotasjon på, men det innebærer (i det minste i teorien) å lage et midlertidig objekt som umiddelbart blir tilgjengelig for søppelrydding (GC):

let object: MyInterface = {
    someOtherProp: "asd",
    ...(someCondition ? {someProp: "asdf"} : null)
};

Live-eksempel:

function create(someCondition) {
  return {
      someOtherProp: "asd",
      ...(someCondition ? {someProp: "asdf"} : null)
  };
}

console.log(create(true));
console.log(create(false));

Det fungerer fordi eiendomsspredning stille ignorerer det hvis verdien den brukes på er undefined eller null. (Dette er annerledes enn iterabel spredning, som ikke gjør det.)

Fordi det er syntaks, kunne JavaScript-motoren i teorien optimalisere det hvis det var et hotspot. Jeg har ingen anelse om de gjør det (sannsynligvis ikke ennå, det er fortsatt relativt nytt), men...

Svar #2

Du kan bruke object assign for å kondisjonelt slå sammen - jeg synes personlig at dette alternativet er det mest lesbare.

let object = Object.assign({ someOtherProp: "asd" }, someCondition ? { someProp: "asdf" } : { });

Relaterte artikler