tsc 不转译 .at() 函数

tsc don't transpile .at() function

当t运行spiling TS to JS compatible with NodeJS v14, using the following config:

{
  "compilerOptions": {
    "lib": ["es2020"],
    "rootDir": "src",
    "outDir": "build",
    "module": "commonjs",
    "moduleResolution": "node",
    "target": "es2020",
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true,
    "skipLibCheck": true,
  }
}

本以为 at(index) 的用法会转换为兼容的 JS 代码,但实际上,当我 运行 构建代码时,它会生成 (...).at is not a function 错误。

[1,2,3].at(-1)

t运行spiled 代码仍然使用 .at(index),但我期待它会得到 t运行spiled 到与 [=16= 上设置的目标兼容的东西]

target: "es2020"

我在这里有什么不正确的地方?

TypeScript 编译器认为此方法在语法上 正确,这就是它不降低它级别的原因。您可以在 中对类似问题进行更好的解释。

但是我没有将您的问题标记为重复,因为缺少一个信息:为什么没有编译器错误?!

如果你去TS playground,你可以看到,如果你尝试写,会立即出现错误:

[1, 2, 3].at(0);

Property 'at' does not exist on type 'number[]'. Do you need to change your target library? Try changing the 'lib' compiler option to 'es2022' or later.

我的猜测是您没有出现错误,因为您使用了错误版本的软件包@types/node(很可能是最新版本)。事实上,如 node.green 所示,自 NodeJS 16.8.0 起支持 Array.prototype.at()。因此,NodeJS 的最新类型反映了这一事实,并且它们为该方法提供了一个签名,该方法会自动包含在 TSC 中。

总之,安装与 NodeJS 运行时相同版本的 NodeJS 类型,您应该会收到 TSC 错误:

npm install @types/node@14