javascript - Flow 不支持某些 JavaScript (ECMAScript) 内置方法,我该怎么办?

标签 javascript flowtype ecmascript-2021

作为习惯于严格类型语言的嵌入式软件工程师,我在用 JavaScript 编写实验性实用程序时不得不使用 Flow ( https://flow.org )。
使用 JS+Flow 编写代码大约 10 分钟后,Flow('flow-bin' 二进制文件)给了我以下错误:

Cannot call string.trim().replaceAll because property replaceAll (did you mean replace?) is missing in String [1].


关于以下(流程注释)代码:
static sanitizeString(string : string) : string {
    return string.trim().replaceAll(/(?:\s+|\.+)/g, "");
}
Flow 告诉我它在(似乎是一个)“符号”定义文件中找不到(相当广泛实现的)string.prototype.replaceAll(...) 函数:tmp/flow/flowlib_1fa18dde633e97c7_501/core.js
这引出了一个问题:
当涉及到使用 ECMAScript 标准(或与此相关的提案/草案,考虑到浏览器实现 ECMAScript 的快节奏特性)定义的(广泛实现的)方法时,Flow 用户仅受提供的定义文件 的支配)?
是否必须修改定义文件 (core.js) 才能解决此问题?

最佳答案

首先,我没有直接回答这个问题,但我会尽量详细说明这个问题。
但这是相当有趣的。它确实引发了该错误:Flow Example
现在,它变得更加有趣,因为 TypeScript 抛出了同样的错误:TS Example
但是,TS 的错误消息更加健壮:

Property 'replaceAll' does not exist on type 'string'. Do you need to change your target library? Try changing the lib compiler option to 'esnext' or later.


因此,我建议您遵循该建议并切换流编译器以遵循不同的规则集(我猜是在 .flowconfig 中?)。

关于javascript - Flow 不支持某些 JavaScript (ECMAScript) 内置方法,我该怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65359341/

相关文章:

javascript - 这个 jQuery 代码片段可以缩短吗?

Javascript 将句子拆分为每个单词,但不要忘记特殊字符

javascript - 如何流动对象键作为字符串和混合类型值的对象数组

javascript - 在箭头函数上运行 eslint 时报告意外 token "="

javascript - 如何在页面顶部隐藏导航栏

javascript - jquery 按钮类更改

javascript - 几个小的reduce vs 一个大的forEach?

javascript - 有什么方法可以告诉 Flow getElementById() 返回的 HTMLElement 不能为 null?

node.js - 顶级等待是否有超时?