¿Alguien puede explicarme por qué no puedo iterar sobre las propiedades (editar: escribieron prototipos falsamente primero) de una clase sin crear una instancia de ella? Un pequeño ejemplo estúpido sería:
export class Animal { name: string; colour: string; constructor(init: string[]) { this.name = init[0]; this.color = init[1] } }Ahora, en otro lugar del programa (mucho antes de que se "cree" el primer libro), me gustaría hacer esto:
for (const key in Object.keys(Animal) { // here I would expect to iterate over the keys 'name' and 'colour' so I can do something like: console.log(Animal[key]); }Soy consciente de que no es posible (publicación anterior aquí y también según MDN ). Pero no entiendo las explicaciones proporcionadas. ¿Podría explicarme por qué es así?
Y, como seguimiento, ¿cómo manejaría tal situación? ¿Debo crear una interfaz/tipo externo que repita? En general, me gustaría tener un solo lugar que "contenga" mis propiedades animales.
Porque las propiedades de Animal no son enumerables como se puede ver en este ejemplo:
Object.getOwnPropertyDescriptors(Animal) { "length": { "value": 1, "writable": false, "enumerable": false, "configurable": true }, "name": { "value": "Animal", "writable": false, "enumerable": false, "configurable": true }, "prototype": { "value": {}, "writable": false, "enumerable": false, "configurable": false } }Si establece las propiedades de la clase en estáticas, se vuelven enumerables. Alternativamente, puede iterarlos de esta manera:
for (const key in Object.getOwnPropertyDescriptors(Animal)) { console.log(Animal[key]); }