打字稿与类的静态成员打字

时间:2019-09-30 12:21:33

标签: typescript class typescript-typings

我想通过此类的对象访问类的静态成员。

我使用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()调用它

2 个答案:

答案 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

的链接