是否可以安全地使用Switch over FlowType联合类型(String Enums)?

时间:2016-09-21 11:10:32

标签: flowtype

在下面的示例中,因为我使用switch语句使用匹配的Message类型,所以我想流程识别我的'ENUM_TYPO'错误的情况。它目前没有。

type Message = 'BROADCAST_MESSAGE' | 'PRIVATE_MESSAGE';

const message: Message = 'BROADCAST_MESSAGE';

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

1 个答案:

答案 0 :(得分:4)

从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语句案例基本上是严格的相等检查。