获取TypeScript中的扩展类列表

zer*_*oin 1 typescript

我有:

classA 
classB extends ClassA
classC extends ClassB
Run Code Online (Sandbox Code Playgroud)

我在classC上创建了对象:

var myClassC= new classC();
Run Code Online (Sandbox Code Playgroud)

ClassA有这个方法:

public get className(): string {
    var funcNameRegex = /function (.{1,})\(/;
    var results = (funcNameRegex).exec(this["constructor"].toString());
    return (results && results.length > 1) ? results[1] : "";
}
Run Code Online (Sandbox Code Playgroud)

如果我调用myClassC.getClassName(),则返回"ClassC"字符串;

我需要的是获得基类的所有类的列表:ClassC,ClassB,ClassA.有没有办法做到这一点?

Nit*_*mer 5

是的,这确实是可能的:

function getClassName(obj: any): string {
    var funcNameRegex = /function (.{1,})\(/;
    var results = (funcNameRegex).exec(obj.constructor.toString());
    return (results && results.length > 1) ? results[1] : "";
}

class ClassA {
    public get className(): string[] {
        let classNames = [];
        let obj = Object.getPrototypeOf(this);
        let className: string;

        while ((className = getClassName(obj)) !== "Object") {
            classNames.push(className);
            obj = Object.getPrototypeOf(obj);
        }

        return classNames;
    }
}

class ClassB extends ClassA {}

class ClassC extends ClassB {}

let a = new ClassA();
console.log(a.className); // ["ClassA"]

let b = new ClassB();
console.log(b.className); // ["ClassB", "ClassA"]

let c = new ClassC();
console.log(c.className); // ["ClassC", "ClassB", "ClassA"]
Run Code Online (Sandbox Code Playgroud)

(游乐场代码)