我正在尝试弄清楚这是否可以通过 flow 实现。
我有一个返回像这样的对象的函数
{
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
将存在,如果isChannel
是false
,那么它可能存在。
if isChannel === true
then channelName: string
else channelName?: string
最佳答案
你可以定义一个union type其中一种类型具有 isChannel: true
而另一种类型具有 isChannel: false
:
type Channel =
| {| isChannel: false, channelName?: string, streamName?: string |}
| {| isChannel: true, channelName: string, streamName?: string |};
然后您可以通过检查 isChannel
来细化类型,而不必检查 channelName
。
关于javascript - 如果 Flow 类型检查中存在另一个值,则假设该值存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57580633/