我试图找出是否可以通过流程。

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

{
  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将存在;如果isChannelfalse,则它可能存在。

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

08-07 09:32