在Flow

时间:2018-12-12 18:28:12

标签: flowtype

我正在编写一个接受字符串的函数,并且如果字符串值是枚举的成员,我想将其视为为该枚举定义的类型。简化示例:

const FRUITS = Object.freeze({
  APPLE: 'APPLE',
  BANANA: 'BANANA',
});

type Fruit = $Values<typeof FRUITS>

function fruitChecker(input: string) {
  if (Object.values(FRUITS).includes(input)) {
    (input: Fruit);
  }
}

Example in Flow's web editor

Flow抛出一个错误,说我在该条件中输入的不是Fruit。但是,如何将我的输入定义为“水果”呢?从更广泛的原始类型中细化输入后,是否有正确的方法可以对枚举成员执行操作?

1 个答案:

答案 0 :(得分:1)

请参阅: https://github.com/facebook/flow/issues/6904https://github.com/facebook/flow/issues/2221

因此.includes不能用于优化,并且Object.values返回mixed。这意味着您当前无法尝试的方案。