在Typescript或ES6中,是否有一种方法可以查看类的所有静态变量和方法?

13

类似于 Object.keys 方法会返回附加在对象上的所有键名称列表,是否有一种方法可以返回附加到类上的所有静态变量名称和所有静态方法名称?

Typescript 示例:

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

这些不是“变量”。它们是“属性”。 - user663031
2个回答

9
所以事实证明,您可以使用Object.keys方法获取附加到类的所有静态变量和方法名称列表。ES6类大多只是ES5的语法糖。所有静态属性都被类继承,这也适用于子类化,我们实际上会得到一个子类构造函数和超类构造函数之间的真正原型链接。
因此,要返回示例的所有静态变量和方法名称:
Object.keys(FindStatics);

3
@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"]

这对我来说是一个问题,但你的解决方案起作用了。 - Ray Foss

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接