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

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

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