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

883
Vistas
¿Hay destructor en TypeScript?

¿Hay destructor en TypeScript? Si no, ¿cómo puedo eliminar un objeto? Probé destructor() y ~ClassName() pero no funcionó.

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

JavaScript utiliza la recolección de elementos no utilizados para eliminar automáticamente los objetos cuando ya no se hace referencia a ellos. No existe el concepto de destructores o finalizadores.

No puede observar cuándo el recolector de basura elimina un objeto, ni es predecible.

over 4 years ago · Santiago Trujillo Denunciar

0

A partir de ES2021, se agregaron finalizadores a la especificación.

Para usar esa función, crea un FinalizationRegistry , que le notifica cuando cualquiera de los objetos asociados se recolecta como basura.

Puedes usarlo así:

 const reg = new FinalizationRegistry((id: number) => { console.log(`Test #${id} has been garbage collected`); }); class Test{ id: number; constructor(id: number){ this.id = id; reg.register(this, this.id); // ^^^^^^^--- This is the "testament", whatever value, which will be passed to the finalization callback } } { const test1 = new Test(1); const test2 = new Test(2); }

Tenga en cuenta que cuando se llama a la devolución de llamada, el objeto ya había sido recolectado como basura; solo su "testamento" (o como dice MDN, de manera menos dramática, el "valor retenido") se le da al finalizador.

Si necesita acceder a algunas propiedades del objeto en el finalizador, puede almacenarlas dentro del testamento, que, en este caso, puede recolectarse como basura justo después del objeto original:

 interface TestTestament{ id: number, intervalid: ReturnType<typeof setInterval> } const reg = new FinalizationRegistry((testament: TestTestament) => { console.log(`Test #${testament.id} has been garbage collected`); clearInterval(testament.intervalid); }); class Test{ private testament: TestTestament; constructor(id: number){ this.testament = { id, intervalid: setInterval(() => { console.log(`Test interval #${id}`); }, 1000) }; reg.register(this, this.testament); } } { const test1 = new Test(1); const test2 = new Test(2); }

Tenga en cuenta que la especificación no garantiza cuándo ocurre la recolección de basura, por lo que es posible que ni siquiera se llame al finalizador si el objeto permanece en la memoria.

over 4 years ago · Santiago Trujillo Denunciar

0

en realidad puedes

 class MyClass { constructor(input1, input2){ this.in1 = input1; this.in2 = input2; } } let myObject = {}; try { myObject = { classHandler: new MyClass('1','2') } } catch (e) { } finally { delete myObject.classHandler // garbageCollect if (global.gc) {global.gc()} }
over 4 years ago · Santiago Trujillo 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