Javascript 在Typescript中按字符串创建枚举实例
我试图在typescript中提取数值枚举的枚举成员,但window[name]确实返回未定义的对象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];
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您需要知道枚举的位置。您可以使用代码中的字符串执行此操作,但键是枚举的位置。