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

能否强制实例方法返回自身类的构造函数(以typeof为返回类型)?

强制实例方法返回自身类的构造函数类型

要实现子类必须返回自身构造函数类型的约束,可以通过调整抽象类的方法返回类型为typeof this,利用TypeScript的多态this类型特性来强制子类匹配自身类型。

修正后的代码实现

abstract class AnAbstractClass {
    // 抽象方法返回当前实例所属类的构造函数类型
    abstract getOwnTypeof(): typeof this;
}

class C1 {
    getOwnTypeof(): typeof C1 {
        return C1;
    }

    static sm1() {}
}

class C2 extends AnAbstractClass {
    // 必须返回typeof C2,否则类型检查报错
    getOwnTypeof(): typeof C2 {
        return C2;
    }

    static sm1() {}
}

let c2 = new C2;
c2.getOwnTypeof().sm1(); // 类型正常识别,可调用C2的静态方法sm1

约束效果

如果子类错误地指定了其他类的构造函数类型(比如写成typeof C1),或者返回了错误的构造函数,TypeScript会直接抛出类型不匹配的错误:

class BadC2 extends AnAbstractClass {
    // 报错:Type 'typeof C2' is not assignable to type 'typeof C1'
    getOwnTypeof(): typeof C1 {
        return C2;
    }
}

原理说明

typeof this在实例方法中是多态类型,它会根据当前实例的实际类来动态解析类型。在抽象类中定义这个返回类型后,所有子类必须返回自身的构造函数类型才能满足类型约束,从而实现你需要的强制效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 07:47:15