有没有一种方法可以将嵌套类用作TypeScript中的类型

时间:2020-06-08 14:39:52

标签: typescript class types

我有一个嵌套类,试图将其用作变量的类型,但是却出现了错误'A' only refers to a type, but is being used as a namespace here

class A {
    static B = class {

    }
    c: A.B;
}

如何使用嵌套类作为类型?

2 个答案:

答案 0 :(得分:1)

Typescript确实支持anonymous class expresions,但是您不能将它们用作类型(无法在类表达式之外引用类表达式的类实例类型)。

您需要在外部类(在您的情况下为A类)之外定义类,然后使用它来键入A类成员。

class B {
   ....
}

class A {
    static b: B;
    c: B;
}

答案 1 :(得分:0)

A.B是一个(匿名)类构造函数。没有名为BA.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>

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

InstanceType<T>