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

TypeScript中能否通过类的实例获取该类静态方法的类型?

问题解答

这个需求可以实现,你写的代码不生效是 TypeScript 的默认类型推导规则导致的。


问题原因

TypeScript 对所有类实例的 constructor 属性默认推导的类型是通用的 Function 类型,不会自动关联到该实例对应的类的静态类型,所以直接通过 foo['constructor']['bar'] 索引无法拿到静态方法的类型。


解决方法

方法1:在原类中显式声明 constructor 类型

直接给类的实例侧添加 constructor 类型声明,指向类本身的静态类型即可:

class Foo {
    static bar (v: boolean) {
        return v
    }
    // 新增这一行,显式指定实例constructor的类型
    declare ['constructor']: typeof Foo
}

const foo = new Foo()
type v = typeof foo['constructor']['bar']
// v的类型推导结果为:(v: boolean) => boolean

方法2:通过工具类型反向提取(无需修改原类)

如果你不能修改原类的定义,可以写一个条件工具类型,从实例类型反向推导对应的类的静态类型:

class Foo {
    static bar (v: boolean) {
        return v
    }
}

const foo = new Foo()

// 工具类型:从实例类型获取对应类的静态类型
type GetClassStaticType<T> = T extends InstanceType<infer C> ? C : never

type v = GetClassStaticType<typeof foo>['bar']
// 推导结果同样为:(v: boolean) => boolean

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:06:01