TypeScript-删除类型后获取泛型类型信息

TypeScript-删除类型后获取泛型类型信息,typescript,Typescript,由于TypeScript对泛型使用类型擦除,所以我正在研究另一种在运行时收集类型信息的解决方案 我提出的解决方案与Java中的类似,使用类 它能工作,但感觉不完整 类型Class={prototype:T}是否足够完整? 有没有更好的方法来做到这一点? 实现这一点的方法通常是使用与函数签名类似但前面有new的构造函数签名: type Constructor<T> = new (... args: any[]) => T; function passMeAClass<T&

由于TypeScript对泛型使用类型擦除,所以我正在研究另一种在运行时收集类型信息的解决方案

我提出的解决方案与Java中的类似,使用类

它能工作,但感觉不完整

类型Class={prototype:T}是否足够完整? 有没有更好的方法来做到这一点?
实现这一点的方法通常是使用与函数签名类似但前面有new的构造函数签名:

type Constructor<T> = new (... args: any[]) => T;

function passMeAClass<T>(cls: Constructor<T>): void {
    console.log(cls);
}
passMeAClass(String)

我已经想到了另一种解决方案,但对于有原型但没有构造函数的东西,比如Window呢?@series0ne适用于Window它有一个构造函数,但如果没有公共构造函数,它确实不起作用。你打算如何处理类值?一种方法的完整性或更好性实际上取决于您的用例。@jcalz如果假设我在编写库代码,那么问题是其他人将如何处理这个类?这就为很多用例打开了大门。我试图进入微软会怎么做的思维模式?嗯,TypeScript对整个静态类型系统使用擦除,而不仅仅是泛型。既然你一开始就有上课的想法,我真的不知道你希望其他人怎么办。微软已经有了在其标准库中添加类似内容的想法,因此对于微软所做的事情的答案在这里可能没有帮助。到目前为止,这个问题似乎很难回答,除非你能解释更多你为什么需要它。
type Constructor<T> = new (... args: any[]) => T;

function passMeAClass<T>(cls: Constructor<T>): void {
    console.log(cls);
}
passMeAClass(String)
function extendTheClass<T extends Constructor<{}>>(cls: T) {
    return  class X extends cls {

    };
}