Javascript 如果流类型检查中存在另一个值,则假定值存在
我想弄清楚这在flow中是否可行 我有一个函数,它返回这样一个对象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,
{
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
这非常完美。非常感谢。