是否有一种快捷方式有条件地设置可选属性?
假设我有此界面:
interface MyInterface {
someProp?: string;
someOtherProp: string;
}
如果我有条件地设置属性,则必须在一些值和未定义之间进行选择。但是,如果我不设置值,则根本不需要该属性。目前我唯一能想到的方法是:
let object: MyInterface = {
someOtherProp: "asd"
};
if (someCondition) object.someProp = "asdf";
我正在寻找与此类似的东西:
let object: MyInterface = {
someProp: someCondition ? "asdf"
}
答案 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));
之所以可行,是因为如果属性传播的值是undefined
或null
,它就会默默地忽略它。 (这与可迭代的点差不同,后者没有。)
由于它是语法,从理论上讲,如果它是一个热点,至少JavaScript引擎可以对其进行优化。我不知道他们是否做(可能还没有,它还是相对较新的),但是...
答案 1 :(得分:3)
您可以使用对象分配有条件地进行合并-我个人认为此选项最易读。
let object = Object.assign({ someOtherProp: "asd" }, someCondition ? { someProp: "asdf" } : { });