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

170
Visualizações
¿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 Respostas
Responde à pergunta

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