如何在TypeScript中初始化对象

时间:2018-10-02 20:48:09

标签: typescript

我有一个简单的模型课

export interface Category {

  name: string;
  description: string;

}

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

category: Category = {};

错误:{}无法分配给类别

category: Category = new Category();

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

有什么建议吗?

8 个答案:

答案 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)

您的对象文字必须与接口匹配。由于您的接口具有两个必需的属性(namedescription),因此必须在实例化对象时同时声明它们。

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 ;