Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

174
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!