【问题标题】:Setting default values to a type created from an object [duplicate]将默认值设置为从对象创建的类型
【发布时间】:2021-08-14 03:31:36
【问题描述】:

我从网络接收一个对象并将其存储在一个数组中。但是,并非所有属性都在输入中设置。令我惊讶的是,虽然属性不是可选的。

interface Person {
  name: string;
  age: number;
}
const tasks: Person[] = [];
tasks.push(JSON.parse('{"name": "Johannes"}'));
console.log(tasks);

我希望缺少的属性具有默认值。我可以使用如下代码:

const person: Person = tasks[0];
if (!("age" in person)) person!.age = 65;

但这很难看,因为它对属性名称进行了硬编码。有没有优雅的 解决办法?

【问题讨论】:

    标签: typescript


    【解决方案1】:

    如果反序列化的对象缺少默认值,您可以使用扩展运算符和包含默认值的模板对象进行浅扩展:

    const template: Partial<Person> = { age: 65 };
    const person = { ...template, ...tasks[0] };
    

    上面的代码将使用 template 中的所有值创建一个对象,然后是 tasks[0] 的所有值。如果在 tasks[0] 中设置了一个属性,那么它将具有优先级,因为它是传播中的第二个对象。

    【讨论】:

      猜你喜欢
      • 2013-06-03
      • 2021-11-04
      • 2021-05-10
      • 2020-04-09
      • 1970-01-01
      • 2020-07-24
      • 2011-10-27
      • 2015-01-28
      • 2017-11-29
      相关资源
      最近更新 更多