打字稿中的三阶嵌套 类

3rd order nested classes in typescript

Edit 1, just made it a little shorter, same code as before tho

只是想说它可能看起来像很多代码,但实际上都是空的。


所以我想创建一个嵌套的 class 结构,如下所示:

let a = new A();
let b = new A.B();
let c = new A.B.C();
// etc

问题是 typescript 通过不同的方式来创建嵌套的 classes 一直在与我斗争。一种看起来非常有前途和优雅的方法,我将其称为 prototypetype 嵌套 classes 的方法。

type 方法的问题在于,它无法扩展到嵌套的 classes 的三阶,意思是 class C inside class B 里面 class A.

class A {
    // error TS7022: 'B' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer.
    public static B = class {
        public static C = class { public constructor(name : string) { } }
        // error TS2502: 'c' is referenced directly or indirectly in its own type annotation.
        public c : A.B.C;
        public constructor(c : A.B.C) { this.c = c; }
    }

    public b : A.B; public constructor(b : A.B) { this.b = b; }
}

namespace A {
    export type B = InstanceType<typeof A.B>;
    // error TS2456: Type alias 'C' circularly references itself.
    export namespace B { export type C = InstanceType<typeof A.B.C>; }
}

export { A };

那是行不通的,我花了最后 8 个小时试图弄清楚为什么它行不通,但我仍然不知道为什么。然后我找到了另一种方法(它更丑陋,但展开后没有任何问题),我将调用 namespace 方法,如下所示:

class A { public b : A.B; public constructor(b : A.B) { this.b = b; } }

namespace A {
    export class B { public c : A.B.C; public constructor(c : A.B.C) { this.c = c; } }
    export namespace B { export class C { public constructor() { } } }
}

export { A };

关于我的实际问题,我完全可以使用 namespace 方法,为什么 type 方法会给我这些错误?它们看起来很奇怪,我不知道为什么 ANYTHING 在这种情况下会成为循环引用。

喜欢这个作品吗?

class C {}
class B {
    static C = C
}
class A {
    static B = B
}