我可以添加属性对象只有当true在typescript?



我有一个对象:

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)),并且默认情况下,原语的对象类型没有自己的、可枚举的属性,因此不会进行扩展。

最新更新