如果流类型检查中存在另一个值,则假定存在该值

时间:2019-08-20 19:48:29

标签: javascript flowtype flow-typed

我正在尝试确定流程是否可行。

我有一个返回这样对象的函数

{
  isChannel: boolean,
  channelName?: string,
  streamName?: string,
}

如果isChannel === true,我知道channelName将会存在。

在我们代码库的许多地方,我们都有类似的东西

const { channelName, streamName, isChannel } = parseUri(uri);
const name = isChannel ? channelName.slice(1) : streamName;

slice(1)是因为channelName包含前导@。我知道有很多解决方法,但是既然这是所有现有代码,我宁愿不必全部更改。

反正有关于流类型的说法吗?如果isChannel为真,则channelName存在,如果isChannelfalse,则可能存在。

if isChannel === true
then channelName: string
else channelName?: string

1 个答案:

答案 0 :(得分:2)

您可以定义一个union type,其中一种类型具有isChannel: true,另一种类型具有isChannel: false

type Channel = 
  | {| isChannel: false, channelName?: string, streamName?: string |}
  | {| isChannel: true, channelName: string, streamName?: string |};

Try Flow

然后,您可以通过检查isChannel来精简类型,而不必检查channelName