@hemia/autobind
v0.0.1
Published
A lightweight utility for automatic method binding in classes
Readme
@hemia/autobind
Decoradores de autobind para TypeScript.
Este paquete proporciona tres decoradores para enlazar automáticamente métodos de clases a su instancia, asegurando que el contexto de this siempre apunte correctamente. Ideal para evitar errores comunes cuando se pasan funciones como callbacks.
Características
@BoundMethod: memoriza y enlaza el método a su instancia.@BoundClass: enlaza automáticamente todos los métodos de la clase.@Autobind: funciona como@BoundMethodo@BoundClasssegún su uso.
Instalación
npm install @hemia/autobindAsegúrate de habilitar experimentalDecorators en tu tsconfig.json:
{
"compilerOptions": {
"experimentalDecorators": true,
"target": "ES6",
"module": "commonjs"
}
}Uso básico
Importación
import { BoundMethod, BoundClass, Autobind } from '@hemia/autobind';@BoundMethod
class MiClase {
private contador: number = 0;
@BoundMethod
incrementar() {
this.contador++;
console.log(`Contador: ${this.contador}`);
}
}
const instancia = new MiClase();
const fn = instancia.incrementar;
fn(); // Contador: 1
fn(); // Contador: 2@BoundClass
@BoundClass
class MiClaseAuto {
private contador: number = 0;
incrementar() {
this.contador++;
console.log(`Contador: ${this.contador}`);
}
decrementar() {
this.contador--;
console.log(`Contador: ${this.contador}`);
}
}
const instancia = new MiClaseAuto();
const inc = instancia.incrementar;
const dec = instancia.decrementar;
inc(); // Contador: 1
dec(); // Contador: 0@Autobind como decorador universal
Decorando un método:
class OtraClase {
constructor(private nombre: string) {}
@Autobind
saludar() {
console.log(`Hola, soy ${this.nombre}`);
}
}
const instancia = new OtraClase('Decorador');
const fn = instancia.saludar;
fn(); // Hola, soy DecoradorDecorando una clase:
@Autobind
class ClaseCompleta {
private valor = 10;
metodo1() {
console.log('Metodo 1:', this.valor);
}
metodo2() {
console.log('Metodo 2:', this.valor);
}
}
const instancia = new ClaseCompleta();
instancia.metodo1();
instancia.metodo2();Funcionamiento interno
@BoundMethodcrea un getter que memoriza elthisenlazado al primer acceso.@BoundClassaplica@BoundMethoda todos los métodos del prototipo.@Autobinddetecta si se usa sobre clase o método, y aplica el decorador correspondiente.
Contribuciones
- Haz un fork del repositorio.
- Crea una rama con tu funcionalidad:
git checkout -b feature/nueva-funcionalidad. - Aplica tus cambios con commits descriptivos.
- Abre un pull request.
Licencia
MIT License — Hemia Technologies
