【发布时间】:2017-08-22 17:38:46
【问题描述】:
我的项目中有一个这样定义的枚举
export enum RootPage {
HOME = <any>'HomePage',
LOGIN = <any>'LoginPage',
TEST01 = <any>'Test01Page',
LAUNCHPAD = <any>'LaunchpadPage',
JOBS = <any>'JobsPage',
MACHINES =<any>'MachinesPage',
GVARS =<any>'GvarsPage',
RESOURCES=<any>'ResourcesPage',
CONFIGURATION=<any>'ConfigurationPage',
TABS=<any>'TabsPage'
};
现在理论上我应该可以做到:
constructor(
private menuitemsService:MenuitemsService
) {}
let pageString = 'HomePage';
let rp:RootPage = RootPage[pageString];
let pi:PageInterface = this.menuitemsService.getPagebyRoot(rp)
菜单项服务:
getPagebyRoot(rootPage:RootPage): PageInterface {
...
}
唯一的问题是,在 'MenuItemService.getPagebyRoot() 中,它会将 rp 解释为 HOME,而不是 HomePage。
所以我最终不得不在 MenuItemService 中创建一个实用方法,并带有一个很棒的 switch 语句。
getRootPageFromString(name:string):RootPage {
switch (name) {
case RootPage.HOME.toString():
return RootPage.HOME;
case RootPage.LOGIN.toString():
return RootPage.LOGIN;
case RootPage.TEST01.toString():
return RootPage.TEST01;
case RootPage.LAUNCHPAD.toString():
return RootPage.LAUNCHPAD;
case RootPage.JOBS.toString():
return RootPage.JOBS;
case RootPage.MACHINES.toString():
return RootPage.MACHINES;
case RootPage.GVARS.toString():
return RootPage.GVARS;
case RootPage.RESOURCES.toString():
return RootPage.RESOURCES;
case RootPage.CONFIGURATION.toString():
return RootPage.CONFIGURATION;
case RootPage.TABS.toString():
return RootPage.TABS;
}
然后在我的代码中替换这一行:
let rp:RootPage = this.menuItemService.getRootPageFromString(pageString);
必须有更简单的方法。
但让我感到困惑的是,我不得不求助于这个。
其他人有类似经历吗?
或者找到更简单的解决方案?
更新:
发表了我自己对这个问题的回答。是因为我使用的是 Typescript 2.3.4 而不是 2.4+
【问题讨论】:
标签: string typescript enums type-conversion