enums - 使用 FlowType 处理枚举

标签 enums flowtype

export type Size =
| 'small'
| 'medium'
| 'large'
| 'big'
| 'huge';

定义 Size无论我在哪里使用它,这样的类型都可以在我的 IDE 中自动完成:

enter image description here

然而,我还想在组件内部使用这些值:假设有一个带有可用大小值的下拉菜单。

为了实现这一点,我正在维护一个 尺寸 我可以从中提取 的对象尺寸 FlowType 通过利用 $ key :
export const sizes = {
  small: 'small',
  medium: 'medium',
  large: 'large',
  big: 'big',
  huge: 'huge',
};

export type Size = $Keys<typeof sizes>;

它的工作原理是指出 Prop 的无效值:
enter image description here

然而,这个解决方案是有代价的:它搞砸了我所有的 自动完成功能 ... :( 有没有更好的方法来处理 FlowType 中的枚举?

enter image description here

最佳答案

这是 $Keys 的巧妙用法!

我不知道推导出 Size 的更好方法来自对象的类型。也许你可以像这样朝另一个方向工作:

export type Size =
| 'small'
| 'medium'
| 'large'
| 'big'
| 'huge';

export const sizes: { [key: string]: Size } = {
  small: 'small',
  medium: 'medium',
  large: 'large',
  big: 'big',
  huge: 'huge',
};

或者通过这种方式消除一些重复:
export const sizes: { [key: string]: Size } = [
  'small',
  'medium',
  'large',
  'big',
  'huge'
].reduce((obj, s) => {
  obj[s] = s
  return obj
}, {})

显然,这使用了更多的样板。但是对于 sizes 的类型约束你至少得到一个检查,防止无效的字符串进入 sizes目的。

关于enums - 使用 FlowType 处理枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43411230/

相关文章:

javascript - 允许类似 promise.all 的函数返回可选的 null 结果

javascript - 如何使用附加属性扩展 Flow 函数类型

Swift - 枚举返回错误的值类型

java - 使用 values( ) 创建枚举常量的最终 Java 类数组

c++ - 从枚举输出的错误值

c++ - alListener3f(AL_ORIENTATION, 0, 0, -1) 之后的 OpenAL AL_ILLEGAL_ENUM

java - 使用 Enum 作为 int 值

observable - 流类型检查 action$ observable

flowtype - Facebook 流程中 module.system=haste 和 module.system=node 有什么区别

javascript - 如何使用 Flow 键入默认导出?