Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

187
Visualizações
How to use jsdoc when class in property, and when using Object.assign?

My goal

  1. to add objects of defined type when creating objects
  2. methods are hidden in a namespace

I have two questions in the code below

  1. the type of result1 does not show the full type when using Object.assign
  2. the type of result2 always shows typeof Result, but I expect it to be the type of instance

Code explanation

Result will be created, when creating I need to add A and B_plus (possibly other extended classes) and will new an Object in other js files. There is no way to use module in this project.

If the above problems cannot be solved, what is a better way to achieve my goal?

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);

about 4 years ago · Juan Pablo Isaza
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda