metodos-variables-estaticos-en-typescript

Métodos y variables estáticos en TypeScript

En TypeScript, los métodos y variables estáticos son aquellos que pertenecen a la clase en sí misma en lugar de a una instancia específica de la clase.

Se utilizan para definir comportamientos que están relacionados con la clase en su conjunto, y no con instancias individuales.

Métodos estáticos

Un método estático es un método que se define con la palabra clave static.

class Calculadora {
    static sumar(a: number, b: number): number {
        return a + b;
    }

    static restar(a: number, b: number): number {
        return a - b;
    }
}

// Uso de los métodos estáticos
console.log(Calculadora.sumar(5, 3)); // Salida: 8
console.log(Calculadora.restar(5, 3)); // Salida: 2

En este ejemplo, sumar y restar son métodos estáticos que realizan operaciones matemáticas. Se accede a ellos directamente desde la clase Calculadora, sin necesidad de crear una instancia.

Los métodos estáticos no tienen acceso a las propiedades de instancia (this), ya que están asociados a la clase en sí misma

Variables estáticas

Una variable estática, al igual que los métodos estáticos, pertenece a la clase en lugar de a instancias individuales. Las variables estáticas se pueden usar para almacenar valores que son comunes para todas las instancias de la clase.

class Configuracion {
    static readonly API_URL: string = "https://api.ejemplo.com";
    static readonly MAX_INTENTOS: number = 5;
}

// Uso de las variables estáticas
console.log(Configuracion.API_URL);         // Salida: https://api.ejemplo.com
console.log(Configuracion.MAX_INTENTOS);    // Salida: 5

En este ejemplo, API_URL y MAX_INTENTOS son variables estáticas que se definen dentro de la clase Configuracion. Estas variables se pueden acceder directamente a través de la clase, sin necesidad de instanciarla.

Herencia de métodos estáticos

Los métodos estáticos pueden ser heredados por clases derivadas.

class Base {
    static mensaje(): void {
        console.log("Mensaje desde la clase Base.");
    }
}

class Derivada extends Base {
    static mensaje(): void {
        console.log("Mensaje desde la clase Derivada.");
    }
}

Base.mensaje();     // Salida: Mensaje desde la clase Base.
Derivada.mensaje(); // Salida: Mensaje desde la clase Derivada.

Casos de Uso Comunes

Utilidades y Funciones Auxiliares

Los métodos estáticos son ideales para definir utilidades y funciones auxiliares que no necesitan acceso a propiedades de instancia.

Por ejemplo, podríamos definir métodos estáticos para realizar conversiones de unidades, cálculos matemáticos o manipulación de strings.

class Conversor {
    static metrosAKilometros(metros: number): number {
        return metros / 1000;
    }
}

console.log(Conversor.metrosAKilometros(5000)); // Salida: 5

Métodos Factoría

En algunos casos, los métodos estáticos se utilizan para crear instancias de la clase con ciertas condiciones o configuraciones.

Estos métodos, a veces llamados métodos factoría, pueden encapsular la lógica de creación de instancias.

class Usuario {
    nombre: string;
    edad: number;

    private constructor(nombre: string, edad: number) {
        this.nombre = nombre;
        this.edad = edad;
    }

    static crearUsuario(nombre: string, edad: number): Usuario {
        if (edad < 18) {
            throw new Error('El usuario debe ser mayor de 18 años.');
        }
        return new Usuario(nombre, edad);
    }
}

const usuario1 = Usuario.crearUsuario("Ana", 22); // Correcto
console.log(usuario1);

const usuario2 = Usuario.crearUsuario("Luis", 16); // Lanza un error

Constantes de Clase

Los métodos estáticos también pueden ser utilizados para acceder a constantes o configuraciones relacionadas con la clase. Aunque no son estrictamente métodos, pueden complementar el uso de métodos estáticos en una clase.

class Configuracion {
    static readonly API_URL: string = "https://api.ejemplo.com";
}

console.log(Configuracion.API_URL); // Salida: https://api.ejemplo.com