typescript - Jag vill lista alla publika egenskaper hos en Klass/Interface
Med TypeScript kan vi definiera klasser och deras publika egenskaper. Hur kan jag få en lista över alla publika egenskaper som är definierade för en klass.
class Car {
model: string;
}
let car:Car = new Car();
Object.keys(car) === [];
Finns det ett sätt att få Car att avge sin model-egenskap?
Svar #1
Som Aaron redan nämnde i kommentaren ovan, ser offentliga och privata medlemmar likadana ut i Javascript, så det kan inte finnas en metod som skiljer mellan dem. Till exempel följande TypeScript-kod
class Car {
public model: string;
private brand: string;
public constructor(model:string , brand: string){
this.model = model;
this.brand = brand;
}
};
kompileras till:
var Car = (function () {
function Car(model, brand) {
this.model = model;
this.brand = brand;
}
return Car;
}());
;
Som du kan se, i den kompilerade JavaScript-versionen finns det absolut ingen skillnad mellan medlemmarna model och brand, även om en av dem är privat och den andra är offentlig.
Du kan skilja mellan privata och publika medlemmar genom att använda någon namngivningskonvention (till exempel public_member och __private_member).
Svar #2
Uppdaterat svar (se även Crane Weirdo:s svar om slutlig JS public/private, vilket mitt svar inte tar upp):
class Vehicle {
axelcount: number;
doorcount: number;
constructor(axelcount: number, doorcount: number) {
this.axelcount = axelcount;
this.doorcount = doorcount;
}
getDoorCount(): number {
return this.doorcount;
}
}
class Trunk extends Vehicle {
make: string;
model: string;
constructor() {
super(6, 4);
this.make = undefined; // forces property to have a value
}
getMakeAndModel(): string {
return "";
}
}
Användning :
let car:Trunk = new Trunk();
car.model = "F-150";
for (let key in car) {
if (car.hasOwnProperty(key) && typeof key !== 'function') {
console.log(key + " is a public property.");
} else {
console.log(key + " is not a public property.");
}
}
Utdata :
axelcount is a public property.
doorcount is a public property.
make is a public property.
model is a public property.
constructor is not a public property.
getMakeAndModel is not a public property.
getDoorCount is not a public property.
Föregående svar:
class Car {
model: string;
}
let car:Car = new Car();
for (let key in car) {
// only get properties for this class that are not functions
if (car.hasOwnProperty(key) && typeof key !== 'function') {
// do something
}
}
