我的项目中有一个枚举,如此
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)
MenuItemsService:
getPagebyRoot(rootPage:RootPage): PageInterface {
...
}
唯一的问题是,在其内部&#39; MenuItemService.getPagebyRoot()中,它将解释为rp为HOME,而不是HomePage。
所以我最终不得不在MenuItemService中使用一个很棒的switch语句创建一个utlility方法。
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 +
答案 0 :(得分:3)
当您在typescript中创建枚举时(在引擎盖下),您会得到一个如下所示的对象:
<强>打字稿:强>
enum RootPage {
HOME = <any>'HomePage',
LOGIN = <any>'LoginPage'
}
<强> JavaScript的:强>
RootPage = {
"HOME": "HomePage",
"LOGIN": "LoginPage",
"LoginPage": "LOGIN",
"HomePage: "HOME"
}
因此,当您从此枚举/对象访问属性时,您将获得值/键:
Console.log(RootPage["HOME"]); // HomePAge
Console.log(RootPage["HomePage"]); // HOME
这一切都得出一个简单的结论:如果你有钥匙,你可以得到价值,如果你有价值,你可以得到钥匙。 无需长时间case
。看来你已经掌握了价值。
答案 1 :(得分:0)
发现它特定于我正在使用的Typescript版本。
版本2.3.4有问题。 2.4_ +似乎没问题。见here。
我最后收到了消息:
输入&#39; string&#39;如果我使用以下代码,则不能分配给&#39; RootPage&#39; :
let pageString = 'HomePage';
let rp:RootPage = RootPage[RootPage[pageString]];