如何将`{}`转换或转换为`T`并保留默认值在TypeScript中?

时间:2018-01-19 12:27:22

标签: typescript typescript-2.5

假设我Product有三个属性及其默认值。当{}中没有值时,如何将Product转换为{}export class Product{ Price:number=20; Label:string="No name"; Details:string="no desc"; } let laptop = {Label:'Laptop'} as Product; //I would like to get this laptop ={Label:'Label',Price:20,Details:'no desc'} 相对于默认值?

=B2=MIN($B2:$TX2)

1 个答案:

答案 0 :(得分:2)

使用类型转换无法做到这一点。当您转换对象as Product时,您正在做的就是对编译器说,"即使它没有与产品相同的属性,这个东西也是一个产品。 。

如果你想要默认值,你需要在你的类上放置一个构造函数,如下所示:

export class Product {
  price: number;
  label: string;
  details: string;

  constructor(obj: {price?: number, label?: string, details?: string}) {
    this.price = obj.price || 20;
    this.price = obj.label || "No name";
    this.details = obj.details || "No description";
  }
}

然后您可以传递任何部分配置对象,其他默认值将被设置。

let laptop = new Product({label: 'Laptop'}); 
// {label: 'Laptop', price: 20, details: 'No description'}

现在,laptop将自动为Product类型,您甚至不必投出它。

提示:您可以使用Partial类型来更轻松地输入构造函数参数。

type Partial<T> = {
  [P in keyof T]?: T[P];
}

然后你的构造函数参数看起来像constructor(obj: Partial<Product>)

有关类型断言(也称为类型转换)的更多信息,请阅读&#39;类型断言&#39;本文的一部分:https://www.typescriptlang.org/docs/handbook/basic-types.html