首页 > 解决方案 > 在命名空间中迭代没有其静态函数的枚举

问题描述

在 Typescript 2.4+ 中,您可以使用相同的名称声明枚举类型和命名空间。在命名空间中,您可以编写静态函数。

export enum Foo {
 ...
}

export namespace Foo {
 export const getAllEnumTypes = (): Foo[] => {
   return Object.keys(Foo)
      .map((key) => Foo[key]));
};

所以上面的代码语句返回 Foo 枚举的所有成员,也返回作为成员的getAllEnumTypes()函数。我们如何防止这种情况发生?

标签: javascripttypescriptenumsnamespaces

解决方案


您可以使用运算符过滤掉所有函数typeof

return Object.keys(Foo)
      .map((key) => Foo[key])
      .filter((value) => typeof value !== 'function'));

推荐阅读