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

如何在TypeScript中初始化包含同类成员变量的类?

解决方法

有两种常用的正确实现方式,可同时避免类型错误与无限递归问题:

方式一:联合类型 + null 初始化

将next_level的类型声明为MyClass | null,初始值设为null,明确表示默认无下一级:

class MyClass {
    name: string = '';
    fields: any[] = [];
    next_level: MyClass | null = null;
}

需要添加下一级时直接赋值即可:

const menuItem = new MyClass();
menuItem.next_level = new MyClass();

这种方式语义清晰,null能准确表达“无下级”的状态,TypeScript也能完整校验类型。

方式二:使用可选属性

若不需要明确“无下级”的状态,仅在存在下级时才保留该属性,可将next_level声明为可选属性:

class MyClass {
    name: string = '';
    fields: any[] = [];
    next_level?: MyClass;
}

初始化时该属性默认不存在,需要时再赋值:

const menuItem = new MyClass();
menuItem.next_level = new MyClass();

这种写法更简洁,适合仅关注“存在下级”场景的需求。

额外提示

  • 绝对不要用new MyClass()作为next_level的初始值,类初始化时会递归创建下级实例,直接触发栈溢出。
  • 建议替换fields的any[]类型为具体类型,保留TypeScript的类型校验优势。

内容的提问来源于stack exchange,提问作者xymzh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 02:42:32