Flow 无法识别回调内的细化

2023-12-13

此代码通过了流程检查:

/* @flow */

function test (list: ?Array<string>): Promise<number> {
  if(list !== null && list !== undefined) {
    return Promise.resolve(list.length)
  } else {
    return Promise.resolve(0)
  }
}

console.log(test(null))

而以下内容会出现空检查错误

/* @flow */

function test (list: ?Array<string>): Promise<number> {
  if(list !== null && list !== undefined) {
    return Promise.resolve().then(() => list.length)
  } else {
    return Promise.resolve(0)
  }
}

console.log(test(null))

error:

property `length`. Property cannot be accessed on possibly null value

显然列表不能null因此,代码结构中一定存在某些问题,导致 Flow 无法识别这一点。

我想了解我遇到的限制以及如何解决它。谢谢!


基本上,Flow 不知道您的类型细化(空检查)将在何时保持() => list.length被执行。在该回调中,Flow 只查看列表的类型 - 这表示它可以为 null。

第一个和第二个片段之间的区别在于第二个片段中list跨越了函数边界——您在与精炼其类型的函数不同的函数中使用它。

一种解决方案是将 list.length 提取到变量中,并在回调中使用该变量。

var length = list.length;
return Promise.resolve().then(() => length)

这也可能有效:

var list2: Array<string> = list;
return Promise.resolve().then(() => list2.length)

请注意,即使对于立即调用的回调也存在此问题,例如使用时map or forEach。 flow的github上有一个关于这个的问题,但我快速搜索后找不到它。

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

Flow 无法识别回调内的细化 的相关文章

  • 省略号在 Flow 类型声明中起什么作用?

    下面的 Flow 代码中的省略号是什么 它们的作用是什么 export type ListTypeNode kind ListType loc Location type TypeNode 这是 Flow 中的新语法 将来将指示该对象类型不
  • flowjs:调用方法“join”。无法在混合上调用方法

    假设我有一个恒定的动物 我用它导入 import animals from animals 假设动物常数为 hoofed horses sheep goats feline lions tigers canine dogs wolves 假
  • 错误:找不到模块“eslint-config-flowtype”

    我正在尝试一起使用 Webpack ESLint 和 Flow 类型 但是 当我启动 webpack dev server 时 我收到以下错误消息 奇怪的是eslint config flowtype甚至不是 NPM 中的模块 以前有人遇到
  • 对象类型的 Flowtype 数组不允许额外的属性

    我在流程方面遇到了一个奇怪的错误 我只是想有一个函数来接受带有一个对象的数组amount属性 但在提供具有更多属性的对象时出现错误 const sum items Array lt amount number gt gt something
  • 在 Flow 中输入“camel caser”:方差问题?

    尝试流链接 https flowtype org try 0PQKgBAAgZgNg9gdzCYAoVAXAngBwKZgBSAygPIByYAvGAHYCuMMYAPmAM4YBOAlrQOas69ALYAjPFyFi4cGHgCGtIQ
  • 为什么 `{ a: string }` 不能流入 `{ a?: string }`

    给定对象类型A and B两者相同 除了A的属性是可选的 为什么不能B用在什么地方A被接受吗 type A a string type B a string const x B a string is incompatible with u
  • React-native 动画库的流类型

    我正在尝试使用React Native 的动画图书馆旁边Flow 不幸的是 我遇到了一堆无法解决的 Flow 错误 请参见屏幕截图 在下面的示例中 我在屏幕上渲染一个圆圈 并希望在使用以下命令渲染它时使其移动Animated spring
  • Flowtype 不断需要空检查

    我想知道如何避免这些大量的空检查 或者至少了解重点是什么 因为它似乎适得其反 如果我省略空检查 Flowtype 会给我一个错误 var myEl new MyElement if document body null error on n
  • 动态类型测试未按预期工作

    这是一个SSCCE http sscce org 我有一个地图容器类 其中内部Map是根据需要创建的set被调用的方法 flow use strict class MapContainer map Map
  • 如何使用 flowtype 在组件的 React 上下文中定义 prop?

    使用时flowtype http flowtype org定义一个 propcontext https facebook github io react docs context html这样 flow type MyType Object
  • Flowtype 函数可能会抛出错误

    有什么方法可以明确定义函数可以抛出错误 显然任何函数都可以抛出错误 但我想明确定义一个函数被设计为抛出并且可能根本不返回值 async function falseThrow promise Promise
  • Flowtype - 如何编写类工厂的声明,例如骨干模型?

    广泛的谷歌搜索和阅读 Flow 文档和示例并没有显示 Javascript 中非常常见的模式的任何示例 具有返回类的函数 一个典型的例子是 Backbone var User Backbone Model extend getFullNam
  • Swagger / OpenAPI API 规范的 Reactjs 客户端

    背景 Using 招摇编辑器 http swagger io swagger editor 我为我的 API 创建了一个规范 我看到 Swagger 还在其 Swagger 编辑器中提供了 生成客户端 选项 可能使用Swagger 代码生成
  • 阻止 FlowType 检查 node_modules 中的错误

    我曾尝试寻找解决方案或解决此问题的方法 但没有成功 以下是描述我的流程安装以及最终我面临的问题的一些步骤 Step 1 我使用创建了一个新的反应本机项目react native init TestProject 我想配置flow http
  • 流 - 与联合类型的交集错误:“无法在交集类型的任何成员上访问属性”

    代码可以尝试一下here https flow org try 0C4TwDgpgBAMg9gYwIbAJZwHZQLxQN4BQUUANiqsAK4AmEAXFBpQLYBGEATgDRGmYDmFGvUYt2HAgF8oAMigAKQs
  • Flowtype - 字符串与字符串枚举不兼容

    我有一个来自选择输入且类型为字符串的值 但是我想将其传递到函数中 更新语言 接收带有类型别名 Language 我面临的问题是 Flow 只允许我打电话更新语言如果我明确地将我的字符串值与枚举字符串进行比较 并且我想使用像 array in
  • 流量类型问号?

    对使用 感到困惑在流动中 据我所知 感谢参数之前或之后的流类型问号 https stackoverflow com questions 47314749 flow type question mark before or after par
  • 反应原生样式有流类型定义吗?

    我正在制作一个 React Native 组件并使用 Flow 来定义属性类型 如下所示 type Props text string textStyle object 然后 这些属性将传递到我的组件内的文本组件 是否有任何用于反应本机的
  • Flowtype 属性“msg”缺失为 null 或未定义

    我发现 Flow 很难用 我明白那个Array find可以返回或未定义 因此 通过阅读以下内容 github Array find on Array 引发 https github com facebook flow issues 351
  • React PropTypes 与 Flow

    PropTypes 和 Flow 涵盖相似的内容 但使用不同的方法 PropTypes 可以在运行时向您发出警告 这有助于快速找到来自服务器等的格式错误的响应 但是 Flow 似乎是未来 并且具有泛型等概念 是一个非常灵活的解决方案 Nuc

随机推荐