如何自动获取TypeScript类的父类类型?如从Bar类得到Foo类
从子类自动推导父类类型的实现方案
先看你的示例代码:
class Foo { x = 1; y = 2; } class Bar extends Foo { override x = 11; z = 3; }
完全可以实现Superclass<Bar>等价于Foo的效果,用TypeScript的条件类型就能做到。你只需要定义一个Superclass工具类型:
type Superclass<T> = T extends typeof extends infer U ? U : never;
测试这个类型:
type ParentType = Superclass<Bar>; // ParentType 的类型就是 typeof Foo,和 Foo 类的类型完全等价
原理说明
这个类型的核心是利用TypeScript的条件类型推断:当T是一个继承了其他类的子类构造函数时,T extends typeof extends infer U会把T的直接父类构造函数推断为U,最终返回这个U类型。
如果子类是多层继承(比如class Baz extends Bar),Superclass<Baz>会直接返回Bar的类型——也就是它的直接父类,而非最顶层的Foo。
内容的提问来源于stack exchange,提问作者user29860985
相关产品推荐
相关产品推荐

