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
。
有没有解决的办法?
答案 0 :(得分:3)
您要查找的类型是(typeof A)['TYPE']
或typeof (A.TYPE)
。
对于(typeof A)['TYPE']
表示法:
静态属性是类构造函数的属性,因此您需要使用typeof A
而不是A
。 (构造函数是名为A
的 value ,它与类型A
,despite 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)
。对于您尝试做的事情,这可能是最简单的表示法。好的,希望能有所帮助;祝你好运!