Javascript 如何在TypeScript中使用泛型模拟Java类文字?

Javascript 如何在TypeScript中使用泛型模拟Java类文字?,javascript,java,typescript,Javascript,Java,Typescript,我需要用TypeScript中的泛型模拟Java类文字 这是我的班级: class Class<T> { public getName(): string { return ...; } } 类{ public getName():字符串{ 返回。。。; } } 这是我创建类文本的尝试 declare global { interface Object { class<T extends object>(t

我需要用TypeScript中的泛型模拟Java类文字

这是我的班级:

class Class<T> {

    public getName(): string {
        return ...;
    }
}
类{
public getName():字符串{
返回。。。;
}
}
这是我创建类文本的尝试

declare global {

    interface Object {

        class<T extends object>(this: T): Class<T>;//LINE X
    }
}
声明全局{
接口对象{
class(this:T):class;//第X行
}
}

例如,对于类
Foo
,我希望通过以下方式获得文本:
Foo.class()
。但是,在X行我有一些错误,因为它返回
Class
而不是
Class
。如何修复它?

因为这意味着要在类上调用,所以需要对
T
进行限制,以确保该方法只在类上显示。这可以使用构造函数签名(
new(…a:any[])=>any
)来完成

由于
T
是类类型,并且您需要实例类型,因此可以使用预定义的条件类型
InstanceType
从类类型中获取实例类型:

declare global {
    interface Object {
        class<T extends new (...a: any[])=> any>(this:T): Class<InstanceType<T>>; 
    }
}
声明全局{
接口对象{
class any>(此:T):class;
}
}

你能看看这个问题吗?