我有一个对象:
const options = {};
,我想添加基于另一个对象的字段。
现在我这样写代码:
const options = {};
if (foo.nullable) options.nullable = true;
if (foo.baz) options.baz = true;
if (foo.bar) options.bar = true;
...
如果我这样写,我无论如何都会得到nullable
键。无论是否为真或假,我只想如果true
键应该存在。
const options = { nullable: options.nullable }
// options = { nullable: ... }
所以我问有没有一种方法可以把这个写得更好?比如:
const options = { nullable && options.nullable } // should be options = {} if nullable is false. otherwise is options = { nullable: true }
所以我问有没有一种方法可以在打字稿中写得更好?
不完全是。if
语句可能是最简单的。
你可以使用扩展符号,像这样:
const options = {
...(foo.nullable ? {nullable: true} : undefined),
...(foo.baz ? {baz: true} : undefined),
...(foo.bar ? {bar: true} : undefined),
};
这是有效的,因为如果你扩散undefined
,它不会做任何事情。但我不认为我会说它"更好"。: -)
如果你的foo
字段的值是总是原语,你可以使用&&
,但我不会:
const options = {
...foo.nullable && {nullable: true},
...foo.bar && {bar: true},
...foo.baz && {baz: true},
};
但是如果foo
字段可能是对象,那么这将不起作用,并且清晰度可能会受到影响。("works"对于原语来说,因为如果扩展一个原语,它将被转换为等效对象(实际上,42
变成new Number(42)
),并且默认情况下,原语的对象类型没有自己的、可枚举的属性,因此不会进行扩展。