TypeScript:在运行时获取对象的 class/constructor
TypeScript: Getting a class/constructor of the object at runtime
出于调试目的,我想要一个抽象 class 的 toString()
方法来打印实例实际是哪个 subclass。
abstract FrameModel {
...
public toString() {
var classOfThis = ?????;
return `FrameModel<${classOfThis}>#${this.vertexId}`;
}
}
另外,如果我可以在 TypeScript 中使用 class 来访问 static
成员,那就太好了;换句话说,如果我得到 TypeScript 将 static
字段放入的 JavaScript 构造函数。
我试过了
var classOfThis = Object.getPrototypeOf(this).constructor;
但事实并非如此:)
使用 Object.getPrototypeOf(this).constructor
确实有效:
type AConstructor = {
new(): A;
name: string;
}
abstract class A {
toString(): string {
return `class: ${ (Object.getPrototypeOf(this).constructor as AConstructor).name }`;
}
}
class B extends A {}
class C extends A {}
let b = new B();
console.log(b.toString()); // class: B
let c = new C();
console.log(c.toString()); // class: C
我不确定为什么它不适合您,我需要查看更多您的代码。
在任何情况下,您还可以使用:this.constructor
:
toString(): string {
return `class: ${ (this.constructor as AConstructor).name }`;
}
出于调试目的,我想要一个抽象 class 的 toString()
方法来打印实例实际是哪个 subclass。
abstract FrameModel {
...
public toString() {
var classOfThis = ?????;
return `FrameModel<${classOfThis}>#${this.vertexId}`;
}
}
另外,如果我可以在 TypeScript 中使用 class 来访问 static
成员,那就太好了;换句话说,如果我得到 TypeScript 将 static
字段放入的 JavaScript 构造函数。
我试过了
var classOfThis = Object.getPrototypeOf(this).constructor;
但事实并非如此:)
使用 Object.getPrototypeOf(this).constructor
确实有效:
type AConstructor = {
new(): A;
name: string;
}
abstract class A {
toString(): string {
return `class: ${ (Object.getPrototypeOf(this).constructor as AConstructor).name }`;
}
}
class B extends A {}
class C extends A {}
let b = new B();
console.log(b.toString()); // class: B
let c = new C();
console.log(c.toString()); // class: C
我不确定为什么它不适合您,我需要查看更多您的代码。
在任何情况下,您还可以使用:this.constructor
:
toString(): string {
return `class: ${ (this.constructor as AConstructor).name }`;
}