我试图找出是否可以通过流程。
我有一个函数返回这样的对象
{
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
为true,则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 |};
Try Flow
然后,您可以通过选中
isChannel
来精简类型,而不必选中channelName
。