Búsqueda de sitios web

reflexión - Bucle en Typescript a través de las propiedades del tipo de clase


¿Cómo se pueden recorrer las propiedades de una clase en TypeScript? Tome la siguiente clase como ejemplo:

export class Task implements Itask {
  public Id: number = 0;
  public Name: string;
  public Description: string;
  public Completed: boolean = false;
  public TaskType: TaskType;
}

Quiero recuperar las propiedades, por lo tanto: ["Id", "Name", "Description", "Completed", "TaskType"]

Intentado

GetTaskHeaders = () => {
  const _self = this;
  const tHead = $('<thead />').append('<tr />');

  for (let i = 0; typeof TodoApp.Task.arguments; i++) {
    const th = $('<th />');
    th.append(TodoApp.Task.arguments[i]);
    tHead.append(th);
  }

  console.log(tHead);

  return tHead;
};  

Desafortunadamente sin éxito, sé que usar "TodoApp.Task.arguments" es incorrecto. Sin embargo, ¿alguien puede mostrarme la forma correcta, por favor?

Respuesta #1

Consideremos que todas las propiedades "no definidas", es decir, todas las propiedades que están definidas en la clase de TypeScript, como (escribí "no definidas" y no undefined por una razón que se aclarará más abajo)

class A { 

   prop1: string
   prop2: number

} 

no será enumerado por ninguno de Object.keys o this.hasOwnProperty(k) ya que el javascript autogenerado no tiene conocimiento de esas propiedades. Solo tienes una opción, cuando crees tu clase de typescript, que es inicializar todas las propiedades con valores por defecto como

class A { 

   prop1: string
   prop2: number
   prop3: B

   constructor() {
     this.prop1="";
     this.prop2=-1;
     this.prop3=null;
   }

} 

En este punto obtendrás todas las propiedades de la instancia A como en esta iteración de mapeo desde un diccionario

var a = new A();
for (var i in properties) {
   if (a.hasOwnProperty(i)) {
      a[i]=properties[i];
   }
}

Si no te gustan los valores predeterminados, aún puedes hacer esto usando la palabra clave mágica undefined de JavaScript para que hagas:

class A { 

   prop1: string = undefined
   prop2: number = undefined

} 

En este punto, el equivalente en JavaScript tendrá todas las propiedades en el modelo y las recorrerás con Object.keys(this) o las inspeccionarás mediante this.hasOwnProperty

Respuesta #2

¿Cómo recorro o enumero un objeto de JavaScript?

En tu caso, algo como:

for (var i in TodoApp.Task) {
    if (TodoApp.Task.hasOwnProperty(i)) {
        var th = $('<th />').append(TodoApp.Task[i]);
        tHead.append(th);
    }
}

Artículos relacionados