flowtype - 是否可以安全地使用切换 FlowType 联合类型(字符串枚举)?

标签 flowtype

在以下示例中,由于我使用 switch 语句匹配消息类型,因此我希望流程能够识别我的错误大小写“ENUM_TYPO”。目前没有。

type Message = 'BROADCAST_MESSAGE' | 'PRIVATE_MESSAGE';

const message: Message = 'BROADCAST_MESSAGE';

switch (message) {
  case 'ENUM_TYPO':
    // Do Broadcast
    break;
  default:
    break;
}

最佳答案

从 v0.32.0 开始,Flow 不会提示无法访问的代码,除非它类似于

// @flow
function foo() {
  throw new Error();
  return 123; // This will error
}. 

但是,请考虑以下代码

// @flow
function foo(x: string): Object {
  if (x === 123) {
    return x;
  }
  return {};
}

目前将不会在此代码上出错。 Flow 实际上注意到 x === 123永远不会是真的。内if块,Flow 将细化 x 的类型到空类型,因为它不相信会到达此代码。这就是为什么它不提示 return x陈述。

Flow 团队的一名成员几乎完成了向 Flow 添加可达性分析的工作。一旦这种改进落地(我猜是 v0.34.0?),Flow 会在看到它认为总是失败的条件时提示。这将对您的示例有所帮助,因为 switch 语句的情况基本上是严格的相等性检查。

关于flowtype - 是否可以安全地使用切换 FlowType 联合类型(字符串枚举)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39614908/

相关文章:

javascript - 在使用 Flow 时,如何将 props 传播到使用精确 props 的 React 组件?

javascript - 为什么 flowtype 认为我的变量未定义?

javascript - 如何正确地在函数中编写一个使流程满意的条件?

javascript - 使用 FlowType 进行 native react : Exporting and importing js interfaces

javascript - 流类型,属性前面的 `+`符号是什么意思?

reactjs - 扩展流 `type Props` 以包含来自另一个组件的 prop 类型?

flowtype - 流量: resolving modules in a monorepo that uses Yarn workspaces

dictionary - 将 ES6 Map 与 Flow 类型一起使用

javascript - FlowType 包装获取而不丢失默认类型注释

javascript - 如何使用流类型来约束该函数的返回值?