【问题标题】:Using enum for event.target.value in Typescript and React在 Typescript 和 React 中为 event.target.value 使用枚举
【发布时间】:2021-07-05 10:52:49
【问题描述】:

我有一个枚举定义类别,可以通过表单单选输入选择:

enum Category {
  PRACTICAL = 'practical',
  POSITIONING = 'positioning',
}

如何在我的单选组 onChange 处理函数中使用这个枚举?这就是我目前正在做的事情:

const [filter, setFilter] = useState<Category>(Category.POSITIONING);

const handleFilterClick = (event: React.ChangeEvent<HTMLInputElement>) => {
  const { value } = event.target;
  setFilter(value); // <== Argument of type 'string' is not assignable to parameter of type 'SetStateAction<Category>'
};

setFilter(value) 不起作用,因为 typeof 值是 string 而不是 Category

我应该如何处理这种情况?

【问题讨论】:

标签: reactjs typescript enums


【解决方案1】:

Typescript 无法确定 event.target.value 将成为该枚举的成员。所以你需要使用类型断言来告诉 typescript 你知道这些是唯一可能的值:

setFilter(value as Category);

请注意,类型断言意味着您告诉 typescript 不要检查您的工作。如果你写的 JSX 实际上有办法在枚举之外设置一个值,那么 typescript 将无法告诉你这个。

【讨论】:

  • 我明白了,谢谢!就我而言,最好的做法是仅使用类型断言还是应该以其他方式重构我的代码?
  • 这似乎是一个使用类型断言的完全合理的案例。
【解决方案2】:

你可以这样做

setFilter(value as Category);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-11
    • 1970-01-01
    • 1970-01-01
    • 2022-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多