【问题标题】:Assume value exists if another value exists in Flow type checking如果流类型检查中存在另一个值,则假设值存在
【发布时间】:2019-12-26 02:00:36
【问题描述】:

我正在尝试弄清楚这是否可以通过 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 将存在,如果isChannelfalse,则它可能存在。

if isChannel === true
then channelName: string
else channelName?: string

【问题讨论】:

    标签: javascript flowtype flow-typed


    【解决方案1】:

    您可以定义一个union type,其中一种类型为isChannel: true,另一种类型为isChannel: false

    type Channel = 
      | {| isChannel: false, channelName?: string, streamName?: string |}
      | {| isChannel: true, channelName: string, streamName?: string |};
    

    Try Flow

    然后您可以通过检查isChannel 来优化类型,而不必检查channelName

    【讨论】:

    • 这是完美的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2014-02-21
    • 1970-01-01
    • 2018-04-10
    • 2021-07-13
    • 2014-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多