Estoy tratando de hacer un bucle en cada propiedad de la clase desde un nuevo objeto, sin ningún conjunto de propiedades. Object.keys() devuelve una matriz vacía. Tal vez porque ninguna de las propiedades está establecida. ¿Conoce una forma de recorrer las propiedades de una clase o un nuevo objeto nuevo de esta clase?
export class Perimeter { Id: string; Name: string; Description: string; Typapp: string; } var tmp = new Perimeter(); console.log('Object keys tmp', Object.keys(tmp)); //Object keys tmp []El resultado que espero es ['Id', 'Nombre', 'Descripción', 'Typapp']
Gracias de antemano
El problema es que no está inicializando esas propiedades, por lo que solo existen en el tipo, no en tiempo de ejecución. TypeScript le advertirá sobre eso, diciendo que nunca se han asignado definitivamente. Por ejemplo:
La propiedad 'Id' no tiene inicializador y no está definitivamente asignada en el constructor. (2564)
Debe inicializar las propiedades para que existan en la instancia que está pasando a Object.keys . Puede hacerlo de un par de maneras diferentes. Una de ellas es usar el modificador public en los parámetros del constructor, que crea una propiedad pública y asigna automáticamente el valor del parámetro a esa propiedad:
/*export*/ class Perimeter { constructor( public Id = "", public Name = "", public Description = "", public Typapp = "" ) { } } const tmp = new Perimeter(); console.log('Object keys tmp', Object.keys(tmp)); //Object keys tmp [](He incluido valores predeterminados allí porque ha mostrado una llamada al constructor que no proporciona ningún argumento).
Pero también puedes escribirlo explícitamente:
/*export*/ class Perimeter { Id: string; Name: string; Description: string; Typapp: string; constructor(id = "", name = "", description = "", typapp = "") { this.Id = id; this.Name = name; this.Description = description; this.Typapp = typapp; } } const tmp = new Perimeter(); console.log('Object keys tmp', Object.keys(tmp)); //Object keys tmp []Para una clase que tiene propiedades con valores iniciales fijos y otras que están asignadas en el constructor, prefiero declararlas y luego asignar las que las necesitan en el constructor, pero para aquellas en las que todas las propiedades son parámetros del constructor, lo convierte en una taquigrafía útil. De cualquier manera, es una cuestión de estilo.