Búsqueda de sitios web

Miembros estáticos de TypeScript vs espacio de nombres con nombre de clase


En TypeScript, he estado separando las variables que no son de instancia de mis clases y colocándolas en un espacio de nombres con el mismo nombre que la clase. Por ejemplo:

class Person
{
    age: number;

    constructor(age: number)
    {
        this.age = age;
    }
}

namespace Person
{
    export let numberOfFingers: number = 10;
}

export default Person;

en oposición a esto:

class Person
{
    static numberOfFingers: number = 10;

    age: number;

    constructor(age: number)
    {
        this.age = age;
    }
}

export default Person;

¿Hay algún beneficio en alguno de estos métodos?

Respuesta #1

En lo que respecta a la verificación de tipos y la generación de código, ambos métodos producen exactamente los mismos resultados. Puedo ofrecer dos argumentos no muy fuertes a favor de los miembros estáticos:

  • es lo más obvio que se puede hacer, no requiere conocimiento de partes avanzadas del lenguaje (fusión de declaraciones) para entender el código

  • si alguna vez necesitas tener una función que cree y devuelva la definición de una clase (como se describe por ejemplo aquí, para simular un miembro genérico estático o para agregar un mixin), entonces los espacios de nombres no funcionarán: no puedes tener un espacio de nombres dentro de una función.