有没有办法在Typescript或ES6中查看类的所有静态变量和方法?

时间:2016-12-13 04:40:50

标签: javascript typescript ecmascript-6

类似于Object.keys方法,它将返回附加到对象的所有键名的列表,是否有办法返回所有静态变量名和附加到类的所有静态方法名?

打字稿示例:

class FindStatics {
  static num1:string = 'Num 1';
  static num2:string = 'Num 2';
  notStatic:string = "I'm not static";
  static concat ():string {
    return `${FindStatics.num1} loves ${FindStatics.num2}`
  }
  addToNonStatic(str:string):string {
    return `${this.notStatic} + ${str}`;
  }
}

我想要做的只是获取静态变量和方法名称的名称;所以在上面的示例中,我希望num1num2concat返回。

2 个答案:

答案 0 :(得分:2)

@Kirkify,Object.keys 不会在我的浏览器中返回方法的名称,因为它们不可枚举。

method names are not returned from Object.keys

对于任何偶然发现它的人来说,getOwnPropertyNames 可以成为解决方案。

Object.getOwnPropertyNames(FindStatics) === [
  "length", "prototype", "concat", "name", "num1", "num2"
]

const lengthPrototypeAndName = Object.getOwnPropertyNames(class {})
Object.getOwnPropertyNames(FindStatics).filter(
  k => !lengthPrototypeAndName.includes(k)
) === ["concat", "num1", "num2"]

答案 1 :(得分:1)

事实证明,您可以使用Object.keys方法获取附加到类的所有静态变量和方法名称的列表。 ES6课程大多只是ES5的语法糖。所有静态属性都由类继承,这也适用于子类化,我们实际上获得了子类构造函数和超类构造函数之间的真实原型链接。

因此,要返回示例的所有静态变量和方法名称:

Object.keys(FindStatics);