我正在尝试确定流程是否可行。
我有一个返回这样对象的函数
{
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
答案 0 :(得分:2)
您可以定义一个union type,其中一种类型具有isChannel: true
,另一种类型具有isChannel: false
:
type Channel =
| {| isChannel: false, channelName?: string, streamName?: string |}
| {| isChannel: true, channelName: string, streamName?: string |};
然后,您可以通过检查isChannel
来精简类型,而不必检查channelName
。