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

882
Views
¿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 answers
Answer question

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 Report

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 Report

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