@hemia/autobind
Version:
A lightweight utility for automatic method binding in classes
149 lines (107 loc) • 2.83 kB
Markdown
# /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
* ``: memoriza y enlaza el método a su instancia.
* ``: enlaza automáticamente todos los métodos de la clase.
* ``: funciona como `` o `` según su uso.
---
## Instalación
```bash
npm install /autobind
```
Asegúrate de habilitar `experimentalDecorators` en tu `tsconfig.json`:
```json
{
"compilerOptions": {
"experimentalDecorators": true,
"target": "ES6",
"module": "commonjs"
}
}
```
---
## Uso básico
### Importación
```ts
import { BoundMethod, BoundClass, Autobind } from '@hemia/autobind';
```
###
```ts
class MiClase {
private contador: number = 0;
incrementar() {
this.contador++;
console.log(`Contador: ${this.contador}`);
}
}
const instancia = new MiClase();
const fn = instancia.incrementar;
fn(); // Contador: 1
fn(); // Contador: 2
```
###
```ts
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
```
### como decorador universal
#### Decorando un método:
```ts
class OtraClase {
constructor(private nombre: string) {}
saludar() {
console.log(`Hola, soy ${this.nombre}`);
}
}
const instancia = new OtraClase('Decorador');
const fn = instancia.saludar;
fn(); // Hola, soy Decorador
```
#### Decorando una clase:
```ts
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
* `` crea un getter que memoriza el `this` enlazado al primer acceso.
* `` aplica `` a todos los métodos del prototipo.
* `` detecta si se usa sobre clase o método, y aplica el decorador correspondiente.
---
## Contribuciones
1. Haz un fork del repositorio.
2. Crea una rama con tu funcionalidad: `git checkout -b feature/nueva-funcionalidad`.
3. Aplica tus cambios con commits descriptivos.
4. Abre un pull request.
---
## Licencia
MIT License — Hemia Technologies