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

169
Views
¿Cómo usar la desestructuración de objetos javascript en un subconjunto de un argumento y mantener la referencia a todas las propiedades restantes en un solo valor?

Estoy tratando de averiguar si hay una manera de usar la desestructuración de objetos de mecanografiado/javascript para apuntar solo a un subconjunto de las propiedades de los objetos mientras se mantienen las propiedades restantes del objeto en su propia variable, "capturando todas las demás propiedades/claves".

Mi caso de uso está relacionado con el uso de la herencia para extender una clase al intentar dejar la API similar. En el siguiente ejemplo, solo quiero usar la destrucción de objetos para las propiedades onlyForB y alsoOnlyForB mientras paso todas las propiedades restantes a la variable de config .

 class A { constructor(config) { this.name = config.name; // ... } } class B extends A { constructor({ onlyForB, alsoOnlyForB, ..config }) { // using ...config doesn't work this.onlyForB = onlyForB; this.alsoOnlyForB = alsoOnlyForB; super(config); } } const b = new B({ onlyForB: "B", alsoOnlyForB: "B2", name: "Satoshi", age: 100}); /** Trying to achieve the following in class B's constructor onlyForB -> "B" alsoOnlyForB -> "B2" config -> { name: "Satoshi", age: 100 } */

Cuando pruebo esto con { onlyForB, alsoOnlyForB, ..config } que es similar a crear objetos con la sintaxis extendida, obtengo errores. En el caso de uso real, estoy extendiendo una clase de código abierto que tiene principalmente propiedades de "configuración" y usando mecanografiado.

¿Hay alguna manera de lograr esto sin eliminar manualmente todas las propiedades del objeto específicas de la clase B ?

Nota al margen: para aquellos familiarizados con Python, estoy tratando de lograr algo similar a lo que hace **kwargs , es decir. def __init__(self, onlyForB, alsoOnlyForB, **kwargs) .

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Hay muchas formas posibles de hacer algo como esto; aquí hay un ejemplo:

 type ConfigForB = { onlyForB: string, alsoOnlyForB: string, age: number, name: string } type ConfigForA = Omit<ConfigForB, 'onlyForB' | 'alsoOnlyForB'> class A { private name: string constructor(config: ConfigForA) { this.name = config.name; // ... } } class B extends A { private onlyForB: string private alsoOnlyForB: string constructor({ onlyForB, alsoOnlyForB, ...config }: ConfigForB) { super(config); this.onlyForB = onlyForB; this.alsoOnlyForB = alsoOnlyForB; } } const b = new B({ onlyForB: "B", alsoOnlyForB: "B2", name: "Satoshi", age: 100});

ConfigForB un tipo ConfigForB que tiene las cuatro propiedades enumeradas en su ejemplo y usé ese tipo en el constructor para B . Luego usé el tipo de utilidad Omit Omit<Type, Keys> para construir un nuevo tipo ConfigForA , que es exactamente igual que ConfigForB , excepto que no tiene las claves onlyForB y alsoOnlyForB .

Si tuviera que definir esto explícitamente, se vería así:

 type ConfigForA = { age: number, name: string }

Esto también funcionaría, por cierto: usar Omit es simplemente bueno ya que no tienes que repetirlo.

Puede probar esto en TS Playground aquí .

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!