流 - 与联合类型的交集错误:“无法在交集类型的任何成员上访问属性”

2024-04-13

代码可以尝试一下here https://flow.org/try/#0C4TwDgpgBAMg9gYwIbAJZwHZQLxQN4BQUUANiqsAK4AmEAXFBpQLYBGEATgDRGmYDmFGvUYt2HAgF8oAMigAKQsRKJymACrgRAcgRxKGYBxDaexPQaMgGAZyOoM-KVAA++XiuRoNWhtrsoEKa8AcD0dhwOTpIAlAQEehh2UDZwzBDwXugYDJlqWLhKpORUtAwATAAMZnyOQmVQVTWe+ZqQfhaGxsHm+l3WUNoAqgDKAILaUvGJyfwQwHneGABqSCSU0LjyLUu5qksxtvaOOAB87sSoAGYKO9kAdHc+kDjYuLp9VtpxxMQc85QOFgnhh7p0rLwICQbBBeH8AUC+FlMPdQrDJEA

我有一个类型是联合类型的交集:

type Location = {
  latitude: number,
  longitude: number
} & ({
  locationType: 'country',
  country: string
} | {
  locationType: 'state',
  state:string
})

我有另一个函数,它基于其中一种联合类型执行某些操作:

const getLocationValue = (location: Location): string => {
  if (location.locationType === 'country')
    return location.country
  else
    return location.state
}

但是,这给了我错误:

财产country。无法在交集类型的任何成员上访问属性

^ 财产state。无法在交集类型的任何成员上访问属性

Flow 应该能够理解,如果 locationType 是国家/地区,那么它应该具有国家/地区属性。

我究竟做错了什么?


为了使用不相交的联合 https://flow.org/en/docs/types/unions/#toc-disjoint-unionsFlow 需要 2+ 种类型可供选择。目前您只定义了一种类型:Location。您可以将公共值拆分为某种“抽象”类型,然后使Location真正的类型联合,以便 Flow 能够在它们之间进行选择。它可能如下所示:

type AbstractLocation = {
  latitude: number,
  longitude: number,
}

type CountryLocation = AbstractLocation & {
  country: string,
  locationType: 'country',
}

type StateLocation = AbstractLocation & {
  locationType: 'state',
  state: string,
}

type Location = CountryLocation | StateLocation

Try it: 工作示例 https://flow.org/try/#0C4TwDgpgBAggRgZ2AJwIYGNgBkD27XACWOAdlALxQDeAUFFADYGHACuAJhAFxQmsC2cCMgA0dRqQDmLDt14ChomgF8aNUJCgBhHKxIoQufEVIVYiFBmx5mpgGTVx6XfuQgeSZIRKSx9BjYmJAAq4HIA5M56BuFiquphUADKwAQQRrZklPCeVhlBUA60-oHEIWE84UhpseLVwHKe3r4qahrQ+WVmOtFunaYAPsmpDf0kas4kSFAIOPzppaQ8Pa6Gi1mO-sxsnDwATAAMfhI+MrtQh8cBxmWhkJVRq7X0jwaVAKpJMOGtNJPTkgg1hupAAaqgGKxoJQABTXTI8MYASg8KGaFAAfJsoIQAGZQOHrAB08KCd2h5EokRcMSR4noyCBrGQZFJZSJrzc4ggDAQEHpUEZbBZEhBJCJ9X5yiAA在 flow.org 上

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

流 - 与联合类型的交集错误:“无法在交集类型的任何成员上访问属性” 的相关文章

  • Redux 状态在 mapStateToProps 中未定义

    我目前正在关注this http teropa info blog 2015 09 10 full stack redux tutorial html教程 我遇到了一些障碍mapStateToProps在下面的代码中 import Reac
  • 在 ajax 完成之前阻止提交

    我正在使用 jQuery 并且我希望在所有 ajax 调用完成之前表单提交不会起作用 我想到的一种方法是存储一个布尔值 该值指示是否有 ajax 请求正在进行 在每一个结束时它都会被设置为 false 我不确定这是否是最好的方法 所以我将不
  • 主干关系事件未触发?

    class TheModel extends Backbone RelationalModel relations type Backbone HasMany key subModels relatedModel SubModel coll
  • 无法显示由 Fine-uploader 上传到 Amazon s3 的图像

    我现在尝试设置fineuploader s3以显示在aws服务器上成功上传的文件的图像 如示例页面上所做的那样 http fineuploader com s3 demo http fineuploader com s3 demo 我 仍然
  • HTMLImageElement 作为 React Child 无效

    我正在尝试异步加载图像 并且仅在加载图像后才将其显示在 React 应用程序中 componentDidMount const img new Image img onload gt this setState originalImage
  • jQuery 中的 Javascript .files[0] 属性

    jQuery 中是否有与此语句等效的语句 var value document getElementById id files 0 使用附加 files 0 的标准 jQuery 选择器似乎不起作用 并且我找不到与 files 等效的 jQ
  • 如何使用键盘和鼠标控制相机 - Three.js

    我在 WEB GL 中有一个带有 Three js 的 3D 环境 并且我曾经使用 Orbitcontrols js http codepen io nireno pen cAoGI http codepen io nireno pen c
  • 如何向 jQuery Tokeninput 添加占位符?

    如何将占位符添加到 jQuery Tokeninput 字段 一个正常的placeholder属性在这里不起作用 对于这样的输入
  • 限制文本区域中每行的字符数

    我整个周末都在寻找解决这个难题的方法 但尚未找到一个可以正常工作的解决方案 我想要实现的是限制文本区域中每行的字符数 不是相同地限制它们 而是我选择的每行不同的字符数 例如 我只想在我的文本区域中包含 4 行 第 1 2 和 3 行将限制为
  • 如何通过 HTML 按钮播放声音

    我目前通过网站播放音乐的方法是通过 HTML 音频标签 不过我希望能够通过 HTML 按钮来播放它 该按钮应该能够在播放和停止之间切换音乐 我在 JSFiddle 创建了一个示例 但不知道如何实现它 有人可以告诉我如何使用我的 JSFidd
  • 将 jquery-mobile 与 Webpack 结合使用

    我正在尝试使用 webpack 加载 jquery mobile 但到目前为止还没有运气 我知道 jquery mobile 依赖于 jquery ui 而 jquery ui 又依赖于 jquery 如何在 Webpack 中设置这样的场
  • 在 MVC Razor 中的 C# 和 Javascript 之间共享常量

    我想在服务器上的 C 和客户端上的 Javascript 中都使用字符串常量 我将常量封装在 C 类中 namespace MyModel public static class Constants public const string
  • HTML colorpicker 发生变化时如何获取新值?

    我正在开发一个需要更改 HTML 颜色的网络应用程序canvas基于的价值观colorpicker 我有一个colorpicker在我需要获取的 HTML 中value从每次更新开始
  • Aptana Studio 3 上的预览选项卡在哪里?

    我在 Windows PC 上使用 Aptana Studio 2 并有一个选项卡用于在 IE 上预览页面 另一个选项卡用于在 Firefox 上预览 但我切换到了 Aptana 3 我不知道是没有预览还是我没有找到它 是的 我在 stac
  • Flux + React.js - 操作中的回调是好还是坏?

    让我解释一下我最近遇到的问题 我有 React js Flux 驱动的应用程序 有一个列表显示文章数量 注意 应用程序中有多个不同的列表 和文章详情查看在里面 但每个列表只有一个 API 端点 它返回文章数组 为了显示我需要的详细信息fin
  • 从多维无穷大数组中删除数组元素

    我想删除一个特定元素 例如 我想删除元素id 76在下面的数组中 而且 数组可以无限地组合在一起 这里的问题是我无法刷新页面 因为我使用 Vue js 进行即时操作 如果我能做到这一点 我的下一个问题可能是如何在我现在想要的地方添加一个元素
  • Jquery:选择菜单以显示和隐藏某些div元素

    我正在创建一个选择菜单 根据所选选项显示和隐藏某些 div 像这样的东西
  • 在javascript中动态生成行?

    我是 javascript 新手 我想在按下 Tab 时动态生成行 并希望获取在动态生成的行中输入的值 以便我可以在 servlet 代码中使用这些值 这是我的html
  • Restangular - _.contains() 不是一个函数

    如果您最近通过 Bower 更新了 Restangular 它将安装最新的 Lodash 新的 4 0 然而 这是一个问题 因为 Restangular Angular 现在会抛出错误 contains 不是函数 你怎么解决 解决方案非常简
  • 如何更改订阅值?使用 rxJS

    我正在创建一个计时器 需要你的帮助 我刚刚学习 Angular 和 rxJS 对此我有一些疑问 我正在创建一个具有启动 停止 暂停 重置功能的计时器 并且 btn Reset 必须将我的计时器 暂停 到 300 毫秒 怎么做 D 我的启动定

随机推荐