【发布时间】:2020-12-18 15:06:01
【问题描述】:
作为一名习惯于严格类型语言的嵌入式软件工程师,在用 JavaScript 编写实验性实用程序时,我不得不使用 Flow (https://flow.org)。
用 JS+Flow 编写代码大约 10 分钟后,Flow('flow-bin' 二进制文件)给了我以下错误:
无法调用 string.trim().replaceAll,因为字符串 [1] 中缺少属性 replaceAll(您的意思是替换吗?)。
关于以下(流注解)代码:
static sanitizeString(string : string) : string {
return string.trim().replaceAll(/(?:\s+|\.+)/g, "");
}
Flow 告诉我它在(似乎是一个)“符号”定义文件中找不到(相当广泛实施的)string.prototype.replaceAll(...) 函数: tmp/flow/flowlib_1fa18dde633e97c7_501/core.js
这引出了问题:
在使用 ECMAScript 标准(或 考虑到浏览器实施 ECMAScript 的快节奏特性,有什么提案/草案?
我是否必须修改定义文件 (core.js) 才能解决此问题?
【问题讨论】:
-
replaceAll可能已被“广泛实施”,但就实际引入的时间而言,它仍然是相当新的。 IIRC,它是一个 ES2020 的添加,它仍然是最近的。我对 Flow 不太熟悉,但也许您可以更改支持的版本。 -
实际上我仔细检查了 -
replaceAll在今年获得批准,但计划添加到 ES2021 标准中。所以,你去吧。 -
@VLAZ 谢谢。似乎只有一个“core.js”作为 Flow 的“事实来源”(如果我错了,更熟悉 Flow 的读者可以纠正我)。转移到 TypeScript,因为 'esnext' 选项是最新的提案(正如 Samuli Hakoniemi 也在下面指出的那样)。至于 replaceAll(),在过去 6 个月里一直处于 TC39 流程的“最后阶段”(第 4 阶段):github.com/tc39/proposal-string-replaceall。
-
是的,它在 6 月获得批准,计划在标准 ES2021 的下一个版本中发布。所以,从技术上讲,它还不是一个标准。不过,它会是。
标签: javascript flowtype ecmascript-2021