event.target.value句柄为ENUM

时间:2019-09-03 10:24:04

标签: reactjs typescript enums material-ui

event.target.value返回一个“字符串”值,我希望将其识别为ENUM类型。 我有以下代码:

export enum Permissions {
    OnlyMe,
    Everyone,
    SelectedPerson
}
...

<FormControl>
<InputLabel>Label name</InputLabel>
<NativeSelect
    value={state.user.permission}
    onChange={(event) =>
        setState({
        ...state,
        user: {
            ...state.user,
            permission: event.target.value as Permissions
        }
    })}
>
    <option value={Permissions.OnlyMe}>Only me</option>
    <option value={Permissions.Everyone}>Everyone</option>
    <option value={Permissions.SelectedPerson}>Selected persons</option>
</NativeSelect>

我收到打字稿错误“将“字符串”类型转换为权限可能是一个错误,因为两种类型都无法与另一种充分重叠。”

我已经尝试过:

permission: Permissions(event.target.value) or

permission: Permissions(String(event.target.value))

,但没有任何效果。 谢谢

1 个答案:

答案 0 :(得分:1)

TypeScript将枚举处理为数字,例如:

  • OnlyMe为0
  • 每个人1个
  • 2 for SelectedPerson

event.target.value将返回一个字符串,所以您的问题是您试图将字符串转换为整数,您只需执行+event.target.value即可解决问题,方法是使用js强制转换字符串值入侵+

注意:上述解决方案将返回一个数字,如果您希望将其作为字符串获取,可以执行Permissions[+event.target.value]