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

154
Vistas
¿Cómo actualizar la clave principal en el objeto, utilizando la implementación remota de un método?

Interfaz de cohete:

 interface Rocket { name: string; setName(name: string): void; }

Objeto de cohete: aplica la interfaz de cohete:

 const rocket: Rocket = { name: 'some-rocket', setName: (name: string) => { rocket.name = name } }

Ahora, si quiero actualizar el nombre del cohete, puedo hacerlo así:

 rocket.setName('new-rocket-name')

Pero como puede ver, el setName está codificado dentro del propio objeto. ¿Qué pasa si quiero ponerlo en un archivo separado? Por ejemplo:

 // set-rocket.ts export const setRocket = (name: string) => { // how to update the name of the object, // which is not available in this scope? }

Puedo cambiar la interfaz y requerir proporcionar el objeto cohete real como parámetro, pero no se ve tan bien:

 interface Rocket { name: string; setName(rocket: Rocket, name: string): void; }

Y luego establezca el nombre del cohete así:

 rocket.setName(rocket, 'new-rocket-name')

¿Hay una mejor manera de hacerlo?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Puede lograr esto cambiando la interfaz de Rocket a una clase:

 class Rocket { constructor (public name: string) {} setName(name: string) { this.name = name; } }

Uso

 const rocket = new Rocket('some-rocket'); console.log(`current rocket name: ${rocket.name}`); rocket.setName('new-rocket-name'); console.log(`rocket name: ${rocket.name}`);

Un ejemplo un poco más complejo


Si desea que el uso de Rocket sea más genérico, es decir, desea crear diferentes tipos de Rockets sin depender demasiado de su implementación, podemos profundizar en OOP y utilizar una combinación de interfaz (API) y clase ( Implementación).

 interface Rocket { readonly name: string; } interface ISetName { setName: (name: string) => void; }

Alguna implementación

 class DynamicRocket implements Rocket, ISetName { constructor(private _name: string) { } setName(name: string) { this._name = name; } get name() { return this._name }; }

La ventaja de este segundo método es que puede tener diferentes implementaciones para la interfaz de Rocket , manteniendo la misma API para cambiar sus nombres. Entonces, en otra parte de su aplicación, puede tener:

 const updateRocketName = (rocket: Rocket & ISetName, name: string) => { rocket.setName(name); return rocket.name; }
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