TypeScript代码中如何正确定义BST类的root属性类型?
解决方法
你遇到的是TypeScript中引用静态内部类实例类型的问题,核心原因是BST.Node是类的静态属性(属于运行时值),不能直接作为类型使用,以下是两种可行的实现方案:
方案1:使用InstanceType工具类型
利用TypeScript内置的InstanceType工具直接提取静态Node构造函数的实例类型,代码如下:
class BST { // 把静态Node定义移到root属性之前,保证类型可识别 static Node = class { key: number value: any constructor (key: number, value: any) { this.key = key this.value = value } } // InstanceType可以提取构造函数对应的实例类型 root: InstanceType<typeof BST.Node>; constructor (key: number, value: any) { this.root = new BST.Node(key, value) } } const t = new BST(1, 'data') console.log(t.root instanceof BST.Node) // 输出:true
方案2:提前抽离类型定义
如果不想调整类内成员的声明顺序,可以提前单独声明Node的结构类型,写法更直观:
// 提前声明Node的结构类型 type BSTNode = { key: number value: any } class BST { root: BSTNode; constructor (key: number, value: any) { this.root = new BST.Node(key, value) } static Node = class { key: number value: any constructor (key: number, value: any) { this.key = key this.value = value } } } const t = new BST(1, 'data') console.log(t.root instanceof BST.Node) // 输出:true
两种方案运行后都会输出预期的true结果。
内容的提问来源于stack exchange,提问作者user15163984
相关产品推荐
相关产品推荐

