复杂的Typescript与对象的接口

use*_*542 5 typescript angular

我有一个接口定义为:

export interface Address {
    addressType: {
        house?: {
            streetAddress: string,
            city: string,
            zip: string,
        },
        apartment?: {
            streetAddress: "",
            unitNumber: "",
            city: "",
            zip: "",
            buildingName?: "",
        },
    }
    instructions?: string;
}
Run Code Online (Sandbox Code Playgroud)

然后在我的组件的Typescript文件中,我定义了一个房屋地址:

address: Address;

constructor() {

    this.address.addressType = {
      house: {
        streetAddress: "1 test",
        city: "test city",
        zip: "92222",
      }
    }        
    console.log(this.address);
}
Run Code Online (Sandbox Code Playgroud)

虽然当我将地址记录到控制台时,我得到:

Uncaught (in promise): TypeError: Cannot set property 'addressType' of undefined
Run Code Online (Sandbox Code Playgroud)

我以为我在构造函数中设置了addressType.有没有更有效的方法来做我正在做的事情?

jh3*_*314 5

您需要this.address先初始化,然后才能设置其地址类型:

constructor() {

    this.address = {
      addressType: {
        house: {
          streetAddress: "1 test",
          city: "test city",
          zip: "92222",
        }
      }
    };        
    console.log(this.address);
}
Run Code Online (Sandbox Code Playgroud)

  • 投反对票的原因是什么?这是建议初始化整个“地址”而不是创建不必要的对象并像其他答案一样覆盖它们的唯一答案。 (2认同)