Se creará el resultado, al crear necesito agregar A y B_plus (posiblemente otras clases extendidas) y crearé un Objeto nuevo en otros archivos js. No hay forma de usar el módulo en este proyecto.
Si los problemas anteriores no se pueden resolver, ¿cuál es una mejor manera de lograr mi objetivo?
const Namespace = {}; { class Result {} class A { a; } class B { b; } class B_Plus extends B { bplus; } class Builder { /** * @instance */ result; constructor() { this.result = new Result(); } /** * * @param {A} a */ addA(a) { this.result = Object.assign(this.result, { a }); return this; } /** * * @param {B} b */ addB(b) { this.result = Object.assign(this.result, { b }); return this; } build() { return this.result; } } Namespace.Result = Result; Namespace.A = A; Namespace.B = B; Namespace.B_Plus = B_Plus; Namespace.Builder = Builder; /** * after build, I get {Result}. * this is the way I find to define the type * @type {Result & {a: A, b: B_Plus}} */ let result1 = new Builder() .addA(new A()) .addB(new B_Plus()) .build(); } /** * dont know how to get correct type * at least be {Result} of {Namespace.Result} * but I get {typeof Result} * @type {typeof Namespace.Result} */ let result2 = new Namespace.Builder() .addA(new Namespace.A()) .addB(new Namespace.B_Plus()) .build(); console.log(result2);