作为习惯于严格类型语言的嵌入式软件工程师,我在用 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/