javascript - 如何在 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 使用什么泛型。有人可以帮我吗?
解决方案
就类型而言,这应该可以工作,并且泛型类型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 中可能的这种结构让人感觉很陌生(向对象添加功能,对于初学者来说通常不是一个好主意)。如果您有具体的用例,请将其发布,我们可能会找到更好的解决方案。