refleksi - Typescript mengulangi properti tipe kelas
Bagaimana seseorang dapat melakukan loop melalui properti dari sebuah kelas di TypeScript? Ambil contoh kelas berikut:
export class Task implements Itask {
public Id: number = 0;
public Name: string;
public Description: string;
public Completed: boolean = false;
public TaskType: TaskType;
}
Saya ingin mengambil properti, yaitu: ["Id", "Name", "Description", "Completed", "TaskType"]
Mencoba
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;
};
Sayangnya tanpa berhasil, saya tahu menggunakan "TodoApp.Task.arguments" itu salah. Namun, bisakah seseorang menunjukkan cara yang benar, tolong?
Jawaban #1
Mari kita pertimbangkan bahwa semua properti "tidak didefinisikan", yaitu semua properti yang didefinisikan dalam kelas typescript seperti (saya menulis "tidak didefinisikan" dan bukan undefined dengan alasan yang akan jelas di bawah)
class A {
prop1: string
prop2: number
}
tidak akan dihitung oleh Object.keys atau this.hasOwnProperty(k) karena javascript autogen tidak memiliki pengetahuan tentang properti-properti tersebut. Anda hanya memiliki satu opsi, ketika Anda membuat kelas typescript Anda, yaitu menginisialisasi semua properti dengan nilai default seperti
class A {
prop1: string
prop2: number
prop3: B
constructor() {
this.prop1="";
this.prop2=-1;
this.prop3=null;
}
}
Pada titik ini Anda akan mendapatkan semua properti dari instance A seperti dalam iterasi pemetaan dari sebuah kamus
var a = new A();
for (var i in properties) {
if (a.hasOwnProperty(i)) {
a[i]=properties[i];
}
}
Jika Anda tidak menyukai solusi nilai default, Anda masih bisa melakukan ini menggunakan kata kunci undefined JavaScript sehingga Anda melakukan:
class A {
prop1: string = undefined
prop2: number = undefined
}
Pada titik ini, rekanan javascript akan memiliki semua properti dalam model dan Anda akan mengiterasinya dengan Object.keys(this) atau memeriksanya melalui this.hasOwnProperty
Jawaban #2
Lihat Bagaimana saya melakukan loop atau mendata sebuah objek JavaScript?
Dalam kasus Anda, sesuatu seperti:
for (var i in TodoApp.Task) {
if (TodoApp.Task.hasOwnProperty(i)) {
var th = $('<th />').append(TodoApp.Task[i]);
tHead.append(th);
}
}
