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

179
Visualizações
TypeScript: propiedad de clase opcional pero no indefinida

¿Hay alguna forma de que pueda tener una propiedad en una Class que sea opcional, pero que no esté indefinida?

Tenga en cuenta que en el ejemplo a continuación, el constructor Class toma un tipo de sí mismo (eso es intencional)

 class Test { foo: number; bar: string; baz?: string; constructor(test: Test) { this.foo = test.foo; this.bar = test.bar this.baz = test.baz || "Default"; } } const first = new Test({foo: 1, bar: "Bob"}); const str = "Some Default String about Bob"; str.replace(first.baz, "New Value"); // Type 'undefined' is not assignable to type 'string | RegExp'.(

Sé que puedo usar el ! operador, pero preferiría no

 str.replace(first.baz!, "New Value");

Parece que esta pregunta aborda la respuesta: "las propiedades de clase no pueden depender de los valores predeterminados"

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Por lo que puedo decir, no desea que la propiedad de clase sea opcional, desea que el parámetro constructor sea opcional. Lo cual es bastante fácil de hacer:

 interface TestParams { foo: number; bar: string; baz?: string; // optional } class Test { foo: number; bar: string; baz: string; // NOTE: not optional! constructor ({ foo, bar, baz, }: TestParams) { this.foo = foo; this.bar = bar; this.baz = baz ?? "Default"; } }

Tenga en cuenta que utilicé el operador coalescente nulo en lugar del "o" lógico, de modo que si baz no está definido, asignaremos el valor predeterminado, pero si es una picadura vacía, no se sobrescribirá. Si está realmente preocupado por la duplicación, y no le importa que su constructor tome parámetros posicionales en lugar de un objeto, puede condensarlo un poco:

 class Test2 { constructor ( public foo: number, public bar: string, public baz = "Default", ) {} }

El comportamiento no es exactamente el mismo con respecto al parámetro opcional, pero está bastante cerca.

Patio de juegos

about 4 years ago · Juan Pablo Isaza Relatório
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