打字稿 - 无法列出方法在一个对象

问题描述:

我有一类这样的:打字稿 - 无法列出方法在一个对象

export class A { 

    @Decorator() 
    public a(): void { 
     ... 
    } 

    @Decorator() 
    public b(): void { 
     ... 
    } 

} 

后来,有,我想列出它的所有方法的A实例(传递为Object虽然)。我认为Reflect.ownKeys(aInstance: Object)可以给我我想要的,但来自函数的结果数组是空的。我究竟做错了什么?

这是因为在javascript中,方法是构造函数原型的一部分。

这很容易看出为什么如果你看看编译的JavaScript,比如这个:

class A { 
    public a(): void {} 

    public b(): void {} 
} 

编译为:

var A = (function() { 
    function A() { 
    } 
    A.prototype.a = function() { }; 
    A.prototype.b = function() { }; 
    return A; 
}()); 

所以:

let a = new A(); 
console.log(Object.keys(a)); // [] 
console.log(Object.keys(a.constructor.prototype)); // ["a", "b"] 
console.log(Object.keys(A.prototype)); // ["a", "b"]