如何在初始化Session实例时直接为part_a和part_b赋值空Part对象?
当然可以啦!你完全不用每次实例化 Session 后再手动赋值 part_a 和 part_b,有几种简洁的方式能在初始化阶段就让它们自动成为空的 Part 对象,下面给你详细介绍:
方案1:构造函数参数直接设置默认值
这是最直接的方式,在 Session 的构造函数参数里,给 part_a 和 part_b 设置默认值为 new Part(),同时可以去掉可选标记(因为默认值已经保证了属性不会是 undefined):
export class Part { constructor( public id?: number, public part?: string, public type?: string ) {} } export class Session { constructor( public genre?: string, public ordre_interface?: number, public nb_serie?: number, public id?: number, public part_a: Part = new Part(), // 自动初始化为空Part public part_b: Part = new Part() ) {} }
这样当你创建 Session 实例时,哪怕不传递 part_a 和 part_b 参数,它们也会自动被赋值为新的空 Part 对象;如果需要传入自定义的 Part 实例,也能正常传递,完全不影响灵活性。
方案2:保留参数可选性,在构造函数体内处理
如果你希望 part_a 和 part_b 的参数依然是可选的(允许传入 undefined),但属性最终不会是 undefined,可以用空值合并运算符在构造函数体内处理:
export class Session { public part_a: Part; public part_b: Part; constructor( public genre?: string, public ordre_interface?: number, public nb_serie?: number, public id?: number, part_a?: Part, part_b?: Part ) { // 若传入的part_a是undefined,就用新的空Part对象 this.part_a = part_a ?? new Part(); this.part_b = part_b ?? new Part(); } }
这种方式既保留了参数的可选性,又能确保类的属性始终是有效的 Part 实例,不会出现 undefined。
方案3:类属性初始化器(无需构造函数参数)
如果你的场景不需要通过构造函数传递 part_a 和 part_b,可以直接在类的属性定义阶段就初始化:
export class Session { // 直接在属性定义时初始化空Part对象 public part_a: Part = new Part(); public part_b: Part = new Part(); constructor( public genre?: string, public ordre_interface?: number, public nb_serie?: number, public id?: number ) {} }
这种写法最简洁,实例创建后 part_a 和 part_b 直接就是空的 Part 对象,后续需要修改的话直接赋值即可。
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

