如何有条件地设置可选属性

时间:2019-02-27 15:39:19

标签: typescript

是否有一种快捷方式有条件地设置可选属性?

假设我有此界面:

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

如果我有条件地设置属性,则必须在一些值和未定义之间进行选择。但是,如果我不设置值,则根本不需要该属性。目前我唯一能想到的方法是:

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

我正在寻找与此类似的东西:

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

2 个答案:

答案 0 :(得分:5)

有一种使用属性传播表示法的方法,但它涉及(至少在理论上)创建一个临时对象,该对象立即可以使用GC:

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

实时示例:

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

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

之所以可行,是因为如果属性传播的值是undefinednull,它就会默默地忽略它。 (这与可迭代的点差不同,后者没有。)

由于它是语法,从理论上讲,如果它是一个热点,至少JavaScript引擎可以对其进行优化。我不知道他们是否(可能还没有,它还是相对较新的),但是...

答案 1 :(得分:3)

您可以使用对象分配有条件地进行合并-我个人认为此选项最易读。

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