Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

173
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda