Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Typescript中按字符串创建枚举实例_Javascript_Typescript_Enums - Fatal编程技术网

Javascript 在Typescript中按字符串创建枚举实例

Javascript 在Typescript中按字符串创建枚举实例,javascript,typescript,enums,Javascript,Typescript,Enums,我试图在typescript中提取数值枚举的枚举成员,但window[name]确实返回未定义的对象 export enum MyEnum { MemberOne = 0, MemberTwo = 1 } export class ObjectUtils { public static GetEnumMembers(name: string): Array<string> { let enumInstance = window[name];

我试图在typescript中提取数值枚举的枚举成员,但window[name]确实返回未定义的对象

export enum MyEnum {    
  MemberOne = 0,   
  MemberTwo = 1
}

export class ObjectUtils {
  public static GetEnumMembers(name: string): Array<string> {
    let enumInstance = window[name];

    return Object.keys(enumInstance).map((k: any) => enumInstance[k]).filter((x: any) => typeof (x) == "string");
  }
}
导出枚举MyEnum{
MemberOne=0,
成员二=1
}
导出类ObjectUtils{
公共静态GetEnumMembers(名称:string):数组{
让enumInstance=窗口[名称];
返回Object.keys(enumInstance).map((k:any)=>enumInstance[k]).filter((x:any)=>typeof(x)==“string”);
}
}
现在我调用GetEnumMembers方法,如下所示:

GetEnumMembers(“MyEnum”)

枚举实例结果未定义

编辑:
我想返回一个字符串数组,其中包含[“MemberOne”、“MemberTwo”]

导出的成员将不会添加到
窗口中,除非您自己添加它们。您可以重构代码以接受枚举本身而不是枚举名称:

export enum MyEnum {    
  MemberOne = 0,   
  MemberTwo = 1
}

// Some other file
import { MyEnum } from "./MyEnum"

class ObjectUtils {
  public static GetEnumMembers(e: {
    [key: string]: any
  }): Array<string> {
    return Object.keys(e).map((k: any) => e[k]).filter((x: any) => typeof (x) == "string");
  }
}

// And use it like:
console.log(ObjectUtils.GetEnumMembers(MyEnum));
导出枚举MyEnum{
MemberOne=0,
成员二=1
}
//其他文件
从“/MyEnum”导入{MyEnum}
类ObjectUtils{
公共静态GetEnumMembers(e:{
[键:字符串]:任何
}):数组{
返回Object.keys(e).map((k:any)=>e[k]).filter((x:any)=>typeof(x)==“string”);
}
}
//然后像这样使用它:
log(ObjectUtils.GetEnumMembers(MyEnum));

请提供一个简单但完整的示例,说明您正在做什么。提供的代码段留下了一些问题没有回答。您能否确保无论
窗口[名称]
是什么,它都不是
未定义的
。检查TypeScript编译器正在生成的JavaScript代码。对不起,您知道如何解决我的问题吗?您可以传入枚举本身,而不仅仅是它的名称。不确定这是否是您的选项。想法是让泛型函数接受字符串,因为枚举类型是从数据库提取的,所以在编程时我不知道它。@nicknack123123您需要知道枚举的位置。您可以使用代码中的字符串执行此操作,但键是枚举的位置。