我有一个简单的模型课
export interface Category {
name: string;
description: string;
}
我需要在角度组件中声明并初始化变量。 尝试过:
category: Category = {};
错误:{}无法分配给类别
category: Category = new Category();
错误:类别指的是一种类型,但被称为值。
有什么建议吗?
答案 0 :(得分:5)
您已定义interface
,而不是class
。 (您还错过了var
。)
export class Category {
name: string;
description: string;
}
var category: Category = new Category();
或者,您可以保持interface
不变:
export class Best implements Category {
}
var best: Category = new Best();
答案 1 :(得分:4)
像C#类:
export class Category {
category: number = null;
description: string = null;
name: string = null;
public constructor(init?: Partial<Category>) {
Object.assign(this, init);
}
}
现在,当您创建新实例时,所有字段名称都是无效的。
const instance_of_category: Category = new Category();
现在您已经拥有所有类都定义为c#的emty类对象:
instance_of_category{
"category": null,
"description": null,
"name": null
}
答案 2 :(得分:2)
如果您不想将您的定义从interface
更改为class
,则可以执行以下操作:
let category = <Category>{ };
否则,您可以遵循其他答案并将Category
更改为班级。
答案 3 :(得分:1)
在Typescript中,如果要使用对象初始化器,则需要定义该类中的所有属性。
let category: Category = {
name: '',
description: ''
};
通过这种方式,您的模型仍然可以保留为接口。
答案 4 :(得分:1)
您的对象文字必须与接口匹配。由于您的接口具有两个必需的属性(name
和description
),因此必须在实例化对象时同时声明它们。
const category: Category = {
name: 'foo',
description: 'bar'
};
如果无法预先构造整个对象,则可以使用内置的Partial
类型来构造对象。
const builder: Partial<Category> = {};
builder.name = 'foo';
builder.description = 'bar';
const category: Category = builder as Category;
答案 5 :(得分:0)
interface Person{
id: number;
name: string;
}
let x: Person = {
id : 0,
name :"JOHN"
};
alert(x.name);
答案 6 :(得分:0)
您也可以使用Record
类型。
{
category: Record<string, string>;
}
答案 7 :(得分:0)
但是我可能错了。
export interface Category {
name: string;
description: string;
}
category = {} as Category ;