Редактировать 1, просто сделал его немного короче, тот же код, что и раньше,
Просто хотел сказать, что он может выглядеть как много кода, но все это довольно пусто.
Итак, я хотел создать структуру вложенных классов, которая бы выглядела так:
let a = new A();
let b = new A.B();
let c = new A.B.C();
// etc
Проблема в том, что машинопись продолжала бороться со мной различными способами создания вложенных классов. Один метод, который выглядел очень многообещающе и изящно и который я собираюсь назвать prototype
или type
метод выполнения вложенных классов.
Проблема с методом type
заключается в том, что он не не масштабируются до вложенных классов 3-го порядка, то есть класс C
внутри класса B
внутри класса 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
дает мне эти ошибки? Они выглядят довольно странно, и я понятия не имею, почему НИЧЕГО будет круговой ссылкой в этом контексте.