【问题标题】:event.target.value handle as ENUMevent.target.value 句柄为 ENUM
【发布时间】:2019-09-03 10:24:04
【问题描述】:

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))

但没有任何效果。 谢谢

【问题讨论】:

    标签: reactjs typescript enums material-ui


    【解决方案1】:

    TypeScript 会将枚举作为 Number 处理,例如:

    • 0 for OnlyMe
    • 每个人都有 1 个
    • 2 代表 SelectedPerson

    event.target.value 将返回一个字符串,所以您的问题是您正在尝试将字符串转换为整数,您可以简单地执行 +event.target.value 这将通过使用 js hack + 转换字符串值来解决您的编译错误.

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

    【讨论】:

    • permission: +event.target.value as Permissions 工作,我现在明白为什么,但 Permissons[+event.target.value] 不工作。打字稿仍然说字符串不适用于权限。无论如何,它与第一个一起工作:-) thx
    • 你可以在这里看到它为我工作codesandbox.io/embed/react-typescript-playground-vd0in它可能是一个打字稿版本问题
    猜你喜欢
    • 2014-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多