我有一个嵌套类,试图将其用作变量的类型,但是却出现了错误'A' only refers to a type, but is being used as a namespace here
class A {
static B = class {
}
c: A.B;
}
如何使用嵌套类作为类型?
答案 0 :(得分:1)
Typescript确实支持anonymous class expresions,但是您不能将它们用作类型(无法在类表达式之外引用类表达式的类实例类型)。
您需要在外部类(在您的情况下为A类)之外定义类,然后使用它来键入A类成员。
class B {
....
}
class A {
static b: B;
c: B;
}
答案 1 :(得分:0)
值A.B
是一个(匿名)类构造函数。没有名为B
或A.B
的 type ,因为命名的类实例类型仅在类 statement 上创建,并且您使用了{{ 3}}。幸运的是,如果您想要该构造函数的类型,则可以将其作为typeof A.B
来获取。而且,如果您想要由该构造函数创建的实例的类型,则可以使用class expression通用类型。
例如:
class A {
static B = class {
x = 1;
y = ""
}
c: InstanceType<typeof A.B> = new A.B();
}
希望它的行为符合您的预期:
const a = new A();
a.c.x.toFixed();
a.c.y.toUpperCase();
回顾一下:通常,如果您有一个名为X
的类构造函数值,则应该能够将其实例类型设为InstanceType<typeof X>
(给予或接受泛型和其他边缘情况)。如果将X
声明为类语句,则还有一个名为X
的类型对应于InstanceType<typeof X>
。
好的,希望能有所帮助;祝你好运!