首页 > 解决方案 > 如何在 TypeScript 中使用泛型模拟 Java getClass()?

问题描述

我需要Object#getClass()在 TypeScript 中使用泛型来模拟 Java 方法。

这是我的班级:

class Class<T> {

    public getName(): string {
        return ...;
    }
}

我需要添加到每个 ObjectgetClass(): Class<CLASS_NAME>方法。所以我这样做:

declare global {

    interface Object {

        getClass(): Class<???>; //LINE X
    }
}

但是,我不明白我应该在 LINE X 使用什么泛型。有人可以帮我吗?

标签: javascriptjavatypescript

解决方案


就类型而言,这应该可以工作,并且泛型类型Class将获得调用它的对象的类型:

class Class<T> {
    public constructor(private target: object) {}
    public getName(): string {
        return this.target.constructor.name;
    }
}

declare global {
    interface Object {
        getClass<T extends object>(this:T): Class<T>; 
    }
}

Object.prototype.getClass = function (this: object){
    return new Class(this);
}
class A {

}

console.log(new A().getClass().getName()) // A

注意:请不要尝试在 Typescript 中模拟 Java,这通常会导致灾难。虽然在 Typescript 中可能的这种结构让人感觉很陌生(向对象添加功能,对于初学者来说通常不是一个好主意)。如果您有具体的用例,请将其发布,我们可能会找到更好的解决方案。


推荐阅读