You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular中TypeScript嵌套类作为属性时如何给嵌套属性正确赋值

错误原因

你定义的Profile类仅声明了surname属性的类型为Surname,未设置初始化逻辑,同理Surname类中的nickname属性也没有默认值。调用new Profile()生成实例时,surname属性默认是undefined,直接访问undefined的下属属性就会触发找不到属性的报错。另外你定义的Nickname类属性名是nickname,和你需要的结构里的myNickname不匹配,需要先修正。

解决方法

方案1:给类添加构造函数,初始化嵌套属性

先修正三个类的定义,新增构造函数逻辑:

nickname.ts

export class Nickname{
  // 修正属性名匹配目标结构
  myNickname: string;
  constructor(myNickname: string) {
    this.myNickname = myNickname;
  }
}

surname.ts

import {Nickname} from './nickname';
export class Surname{
  newName: string;
  nickname: Nickname;
  constructor(newName: string, nickname: Nickname) {
    this.newName = newName;
    this.nickname = nickname;
  }
}

profile.ts

import {Surname} from './surname';
export class Profile{
  name: any;
  surname: Surname;
  constructor(name: string, surname: Surname) {
    this.name = name;
    this.surname = surname;
  }
}

赋值时直接链式初始化即可:

public profile: Profile;
this.profile = new Profile(
  'Nameless',
  new Surname(
    'Unknown',
    new Nickname('SS.h77')
  )
);

方案2:不修改类定义,赋值前先初始化嵌套实例

如果不想改动原有类的结构,也可以在赋值前手动生成嵌套类的实例:

public profile: Profile;
this.profile= new Profile();
this.profile.name = 'Nameless';
// 先初始化surname实例
this.profile.surname = new Surname();
this.profile.surname.newName = 'Unknown';
// 再初始化nickname实例
this.profile.surname.nickname = new Nickname();
// 给nickname的对应属性赋值
this.profile.surname.nickname.myNickname = 'ss.hh7';

补充提示

如果这些类仅用于做数据结构的类型约束,不需要编写额外的类方法,也可以用interface(接口)代替类,使用起来更轻量,直接字面量赋值即可。


内容的提问来源于stack exchange,提问作者SS.h777

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 04:39:04