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

Javascript 如果流类型检查中存在另一个值,则假定值存在,javascript,flowtype,flow-typed,Javascript,Flowtype,Flow Typed,我想弄清楚这在flow中是否可行 我有一个函数,它返回这样一个对象 { isChannel: boolean, channelName?: string, streamName?: string, } const { channelName, streamName, isChannel } = parseUri(uri); const name = isChannel ? channelName.slice(1) : streamName; 如果isChannel===true,

我想弄清楚这在flow中是否可行

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

{
  isChannel: boolean,
  channelName?: string,
  streamName?: string,
}
const { channelName, streamName, isChannel } = parseUri(uri);
const name = isChannel ? channelName.slice(1) : streamName;
如果
isChannel===true
,我知道
channelName
将存在

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

{
  isChannel: boolean,
  channelName?: string,
  streamName?: string,
}
const { channelName, streamName, isChannel } = parseUri(uri);
const name = isChannel ? channelName.slice(1) : streamName;
slice(1)
是因为
channelName
包含一个前导的
@
。我知道有很多方法可以解决这个问题,但由于这都是现有的代码,我宁愿不必全部修改

对于流类型是否有这样的说法?如果
isChannel
为true,
channelName
将存在,如果
isChannel
false
,则它可能存在

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

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


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

这非常完美。非常感谢。