角度:定义模型并使用空值声明对象

时间:2019-08-26 18:21:40

标签: typescript

我正在构建一个角度应用程序,并且在model.ts文件中定义了几个os模型。 我已经在组件中创建了该对象的实例。但是,当我尝试直接将值分配给属性时,它说不能将值分配给未定义。

models.ts

export class Staff {
    id: string;
    name: string;
    address: Address;
}

export class Address{
streetName: string;
zipCode: string;
}

component.ts

  public staff: Staff =  <Staff>{};

staff.address.zipCode = "28657";

在这里,当我尝试直接为邮政编码分配值时,会引发错误。 有没有一种方法可以使用默认的空值''声明对象?

2 个答案:

答案 0 :(得分:0)

错误

实例化新的Staff时,所有值默认为null。 因此,staff.addressnull,您尝试访问zipCode的{​​{1}}属性,这会导致给定的错误。

自定义默认值:普通构造函数

您可以定义自己的构造函数,在其中设置所需的默认值。 例如,在您的null类中:

Address

实例化一个新的地址时调用构造函数。在此示例中,它采用可选参数constructor (zipCode?: string) { if (zipCode) { this.zipCode = zipCode; } // process other values } (由于zipCode而可选)。因此,您可以像这样实例化它:

?

或类似这样:

address: Address = new Address();

具有公共/私人的构造函数

Typescript为您提供了上述的简写形式:

address: Address = new Address("04107");

或     构造函数(私有zipCode:字符串=“ 04107”){}

通过使用constructor(private zipCode?: string) {} (或private)打字稿作为构造函数参数的前缀,会将这些变量自动添加到类中。

答案 1 :(得分:0)

在编译器部分中,有一个名为strictPropertyInitialization的属性,

此属性会强制您初始化属性

要解决此问题->在这样的编译器选项中设置false属性:

"strictPropertyInitialization": false