所以我有一个像这样的枚举:
enum AppMode {
MAIN = 'MAIN',CALENDAR = 'CALENDAR',WITnesSES = 'WITnesSES',EXHIBITS = 'EXHIBITS'
};
我有一个带有四个按钮的React组件,它们的单击事件均由相同的函数处理,如下所示:
<button type="button" classname="NavLink" data-appMode={ AppMode.MAIN } onClick={ this.handleAppModeclick.bind(this) }>Main</button>
<button type="button" classname="NavLink" data-appMode={ AppMode.CALENDAR } onClick={ this.handleAppModeclick.bind(this) }>Hearings Calendar</button>
<button type="button" classname="NavLink" data-appMode={ AppMode.WITnesSES } onClick={ this.handleAppModeclick.bind(this) }>Witnesses</button>
<button type="button" classname="NavLink" data-appMode={ AppMode.EXHIBITS } onClick={ this.handleAppModeclick.bind(this) }>Exhibits</button>
请注意,data-appMode属性由枚举值设置。这是处理函数:
handleAppModeclick(e: React.MouseEvent<HTMLButtonElement>) {
let attr: string | null = (e.target as HTMLButtonElement).getattribute("data-appMode");
let result: AppMode = AppMode.MAIN;
if (attr !== null) {
result = AppMode[attr];
}
this.props.setappMode(AppMode[result]);
}
但是,这行:result = AppMode [attr];生成以下错误:元素隐式具有“ any”类型,因为类型“ string”的表达式不能用于索引类型“ typeof AppMode”。 在“ typeof AppMode” .ts(7053)上找不到带有“字符串”类型参数的索引签名。
那么有没有一种方法可以使用data- *属性将结果变量的值设置为枚举的值,而不必经过一堆if语句?