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.