我想通过此类的对象访问类的静态成员。
我使用obj.constructor
完成。除了使用
类型“函数”上不存在属性“ getName”
class Foo {
public static getName(): string {
return 'foo';
}
}
const foo = new Foo();
const name: string = foo.constructor.getName();
我尝试使用:const name: string = (foo.constructor as Foo).getName();
但这给了我
属性“ getName”是类型“ Foo”的静态成员
编辑:
它可以使用:const name: string = (foo.constructor as typeof Foo).getName();
没有手动转换类,有什么方法可以工作吗?
信息:在我的特定情况下,我无法直接使用Foo.getName()
调用它
答案 0 :(得分:1)
可以通过直接调用构造函数来访问静态方法:
Foo.getName()
如果由于某种原因您无权访问构造函数,请断言foo.constructor
是其类型。
const name: string = (foo.constructor as typeof Foo).getName();
答案 1 :(得分:1)
如果您无权访问该类,则必须与编译器联系。请注意,这是一个肮脏的肮脏hack,但是有时您只需要告诉编译器“关闭,我知道我在做什么”。
class Foo {
public static getName() {
return 'foo';
}
}
const foo = new Foo();
interface FudgeIt {
getName: () => string,
}
// compiler won't let us cast a function to
// a random interface without declaring it
// unknown first.
const c: unknown = foo.constructor;
(c as FudgeIt).getName();
这里是相关playground
的链接