从接口声明中访问静态属性

时间:2019-03-04 01:50:01

标签: javascript typescript types

class A {
    public static readonly TYPE = "A";
}

interface forA {
    for: A.TYPE
}

如您所见,我正在尝试从A.TYPE访问forA,以便可以进行某种形式的类型保护。

但是,我收到了错误消息:TS2702: 'A' only refers to a type, but is being used as a namespace here

有没有解决的办法?

1 个答案:

答案 0 :(得分:3)

您要查找的类型是(typeof A)['TYPE']typeof (A.TYPE)

对于(typeof A)['TYPE']表示法:

  • 静态属性是类构造函数的属性,因此您需要使用typeof A而不是A。 (构造函数是名为A value ,它与类型Adespite the same name不同。因此typeof A为您提供了类型的构造函数)

  • 并且您需要使用括号表示法来look up键的"TYPE"属性。无论出于何种原因,TypeScript都没有.作为类型运算符(也许会与某些命名空间符号冲突吗?)。因此它是(typeof A)['TYPE']而不是(typeof A).TYPE

对于typeof (A.TYPE)表示法:

  • 如上所述,有一个名为A的值,它是A类实例的构造函数。该值具有一个名为TYPE的属性。因此,存在一个名为A.TYPE的值。该值的类型可以查询为typeof (A.TYPE)。对于您尝试做的事情,这可能是最简单的表示法。

好的,希望能有所帮助;祝你好运!