gpt4 book ai didi

typescript - 为什么 TypeScript 转译的字符串连接从 + 运算符更改为 String.concat() 调用

转载 作者:行者123 更新时间:2023-12-05 01:04:46 25 4
gpt4 key购买 nike

我试图在 TypeScript 文档中找到解释,说明为什么我转译的 JavaScript 在过去使用加法运算符时现在使用 String.concat()。我无法确定我的项目或工具链中的哪些更改导致了转译文件的差异。让我举一个例子来说明我要描述的内容。

几个月前转译的 TypeScript 文件会转译这个 TypeScript:

`订单#${order.tranid} (IID ${order.id}) 没有资格进行处理 - 正在退出`

进入这个 JavaScript:

"订单#"+ order.tranid + "(IID "+ order.id + ") 没有资格处理 - 退出"

现在,当我处理这个项目时,将生成相同的 TypeScript:

“订单号”.concat(order.tranid, "(IID ").concat(order.id, ") 没有资格处理 - 正在退出"

我的问题是:这里有人知道导致不同输出的原因吗?这是最近对编译器的更改吗?正如我在开头提到的那样,我在搜索中找不到任何解释它的内容。

最佳答案

实现更改是为了使转译的 TypeScript 模板字符串更符合原生模板文字的规范。

在 TypeScript 问题 #39744 中对此进行了跟踪和 #43686 .

此更改在 TypeScript 4.4.2 中公开发布(4.4.0 和 4.4.1 分别是 beta 和 RC 版本)。

有一个related comment在该线程中,表明之前的 + 字符串连接也会在即将到来的 Temporal 提案中引发错误。

使用 Github 问题中的示例:

class C {
toString() {
return "toString()";
}
valueOf() {
return "valueOf()";
}
}

const c = new C;
const s = `${c}`;
console.log(s);

由 JavaScript 规范为模板文字定义的预期结果应该是 toString()

但是,由于 TypeScript 正在转译以使用字符串连接运算符 +,它会返回不正确的 toValue()

通过更改为 string.concat() 转译的 TypeScript 代码现在返回正确的 toString() 结果。

请注意,这仅在 TypeScript 转换为 ES3 或 ES5 时才会出现问题。

关于typescript - 为什么 TypeScript 转译的字符串连接从 + 运算符更改为 String.concat() 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71522442/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com