javascript - 如果 Flow 类型检查中存在另一个值,则假设该值存在

标签 javascript flowtype flow-typed

我正在尝试弄清楚这是否可以通过 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

最佳答案

你可以定义一个union type其中一种类型具有 isChannel: true 而另一种类型具有 isChannel: false:

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

Try Flow

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

关于javascript - 如果 Flow 类型检查中存在另一个值,则假设该值存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57580633/

相关文章:

javascript - lodash find() 的流式注解

javascript - 导航 View Backbone 不会删除模型

javascript - 为什么我在调用 lambda 函数时收到错误 "Task timed out after 6.01 seconds"?

javascript - 使用构造函数的参数值查找对象的名称

javascript - 使用目录 "flow-typed"的流程,即使我在 .flowconfig 中配置了另一个 [lib] 值

javascript - 为什么Flow在访问数组元素时会忽略undefined的可能性?

javascript - ext-js动态更新参数

reactjs - 如何让 Flow 了解码件将通过 cloneElement 接收所需的 props?

javascript - 如何为具有字段的函数声明流类型?

javascript - 如何自定义外部流类型定义文件