如何在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
相关产品推荐
相关产品推荐

