如何在 TypeScript 中初始化对象

新手上路,请多包涵

我有一个简单的模型类

export interface Category {

  name: string;
  description: string;

}

我需要在角度组件中声明和初始化一个变量。试过:

 category: Category = {};

错误:{} 不可分配给类别

category: Category = new Category();

错误:类别指的是一种类型,但被称为值..

有什么建议么?

原文由 Aragorn 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.8k
2 个回答

有多种方法可以解决此问题,具体取决于您想要的结果。

方式1:将您的 interface 转换为 class

 export class Category {
  name: string;
  description: string;
}
const category: Category = new Category();

方式2:将您的 interface 扩展为 class

 export class CategoryObject implements Category {
}
const category: Category = new CategoryObject();

方式3:完全指定您的对象,匹配 interface

 const category: Category = {
  name: 'My Category',
  description: 'My Description',
};

方式4:使属性可选

export interface Category {
  name?: string;
  description?: string;
}

const category: Category = {};

方式5:更改变量的类型以使用 Partial<T>

 export interface Category {
  name: string;
  description: string;
}

const category: Partial<Category> = {};

原文由 Ian MacDonald 发布,翻译遵循 CC BY-SA 4.0 许可协议

初始化对象的其他方法是使用 pipe (|) 定义多种类型,如果您希望将来通过回调或休息调用填充对象,这是最好的。

但是您可能必须在这里处理可空性的情况,否则您最终会遇到 null ref 异常。

这是一个示例用法:

 export class MyClass{
    myObject : MyObject | null = null;
}

注意:编译器期望 myObject 字段由值或 null 初始化

另一种方法是使用未定义的字段,这样编译器就不会期望初始化器

export class MyClass{
    rates : MyObject | undefined; //compiler doesn't expect it to be initalized
}

原文由 MDT 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进