首页 > 解决方案 > 如果流类型检查中存在另一个值,则假设值存在

问题描述

我试图弄清楚这是否可以通过流量来实现。

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

{
  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

标签: javascriptflowtypeflow-typed

解决方案


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

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

尝试流

然后,您可以通过检查来细化类型,isChannel而无需检查channelName


推荐阅读