Skip to content

Instantly share code, notes, and snippets.

@pmcao
Created May 9, 2016 19:43
Show Gist options
  • Save pmcao/8f614a17a5f91bcec60ff03743215a2f to your computer and use it in GitHub Desktop.
Save pmcao/8f614a17a5f91bcec60ff03743215a2f to your computer and use it in GitHub Desktop.
typescript-reflection
// Playground link: https://www.typescriptlang.org/play/#src=var%20classHierarchy%3A%20any%20%3D%20%7B%7D%3B%0D%0A%0D%0Aclass%20A%20%7B%0D%0A%0D%0A%20%20%20%20a%3Astring%3B%0D%0A%0D%0A%20%20%20%20constructor%20()%7B%0D%0A%20%20%20%20%20%20%20%20document.body.innerHTML%20%2B%3D%20(%22constructing%20A%20%3Cbr%3E%22)%3B%0D%0A%20%20%20%20%20%20%20%20classHierarchy%5B%22base%22%5D%20%3D%20A.name%3B%0D%0A%20%20%20%20%7D%0D%0A%7D%0D%0A%0D%0A%0D%0Aclass%20B%20extends%20A%20%7B%0D%0A%0D%0A%20%20%20%20b%3Astring%3B%0D%0A%0D%0A%20%20%20%20constructor%20()%7B%0D%0A%20%20%20%20%20%20%20%20super()%3B%0D%0A%20%20%20%20%20%20%20%20document.body.innerHTML%20%2B%3D%20(%22constructing%20B%20%3Cbr%3E%22)%3B%0D%0A%20%20%20%20%20%20%20%20classHierarchy%5B%22trueClass%22%5D%20%3D%20B.name%3B%0D%0A%20%20%20%20%7D%0D%0A%7D%0D%0A%0D%0A%0D%0Aclass%20C%20extends%20B%20%7B%0D%0A%0D%0A%20%20%20%20c%3Astring%3B%0D%0A%0D%0A%20%20%20%20whoAmI()%20%7B%0D%0A%20%20%20%20%20%20%20%20console.log(classHierarchy)%3B%0D%0A%0D%0A%20%20%20%20%20%20%20%20for%20(var%20key%20in%20classHierarchy)%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(classHierarchy%5Bkey%5D%20%3D%3D%20this.constructor.name)%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20document.body.innerHTML%20%2B%3D%20(%60I%20am%20%24%7Bkey%7D%2C%20my%20name%20is%20%24%7Bthis.constructor.name%7D%60)%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0D%0A%20%20%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20constructor%20()%7B%0D%0A%20%20%20%20%20%20%20%20super()%3B%0D%0A%20%20%20%20%20%20%20%20document.body.innerHTML%20%2B%3D%20(%22constructing%20C%20%3Cbr%3E%20%22)%3B%0D%0A%20%20%20%20%20%20%20%20classHierarchy%5B%22implementedClass%22%5D%20%3D%20C.name%3B%0D%0A%20%20%20%20%7D%0D%0A%7D%0D%0A%0D%0Avar%20c%20%3D%20new%20C()%3B%0D%0Ac.whoAmI()%3B%0D%0A
var classMemberNames = Object.getOwnPropertyNames(Foo.prototype);
var classHierarchy: any = {};
class A {
a:string;
constructor (){
console.log("constructing A");
classHierarchy["base"] = A.name;
}
}
class B extends A {
b:string;
constructor (){
super();
console.log("constructing B");
classHierarchy["trueClass"] = B.name;
}
}
class C extends B {
c:string;
whoAmI() {
console.log(classHierarchy);
for (var key in classHierarchy){
if (classHierarchy[key] == this.constructor.name){
console.log(`I am ${key}, my name is ${this.constructor.name}`);
}
}
}
constructor (){
super();
console.log("constructing C");
classHierarchy["implementedClass"] = C.name;
}
}
var c = new C();
c.whoAmI();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment