TypeScript中能否创建强制返回typeof结果的泛型类型?
在TypeScript中能否创建泛型直接返回类的typeof结果?
直接创建这样的泛型类型是做不到的。原因很明确:当你把C1作为泛型参数传入时,TypeScript在类型层面识别的C1是类的实例类型,而typeof C1对应的是类的构造函数类型——这是两个完全独立的类型范畴。
你写的type TGenericType<T> = typeof T存在逻辑问题:这里的T是类型参数,而typeof操作符只能用于值,不能用于类型本身。对类型使用typeof在TypeScript中没有意义,编译器也不会按照你预期的方式解析。
如果想避免每次显式书写typeof C1,可以通过以下方式简化:
方案1:辅助函数结合ReturnType
class C1 {} function getConstructor<T>(cls: T): typeof cls { return cls; } // 获取构造函数类型 type C1Constructor = ReturnType<typeof getConstructor<C1>>; let test: C1Constructor = C1;
方案2:直接定义类型别名
class C1 {} type C1Constructor = typeof C1; let test: C1Constructor = C1;
本质上,TypeScript的类型系统设计中,类名本身在类型层面指向的是该类的实例类型,而构造函数类型必须通过typeof操作符从类这个值上获取,这一规则无法通过泛型参数直接绕过。
内容的提问来源于stack exchange,提问作者rplaurindo
相关产品推荐
相关产品推荐

