如何在打字稿中进行顶级等待(从 commonjs 切换到 esnext),而不必更改所有导入以使其以 .js 结尾

sev*_*sev 14 javascript node.js typescript tsc

我想在我的 typescript Nodejs 项目中有顶级的等待。

我的 tsconfig 过去看起来像这样:

{
  "compilerOptions": {
    "target": "es2017",
    "module": "commonjs",
    "lib": [
      "dom",
      "es6",
      "es2017",
      "esnext.asynciterable"
    ],
    "skipLibCheck": true,
    "sourceMap": true,
    "outDir": "./dist",
    "moduleResolution": "node",
#### other stuff which I think is not relevant removed ####
Run Code Online (Sandbox Code Playgroud)

我现在把它切换到

{
  "compilerOptions": {
    "target": "esnext",
    "module": "esnext",
    "lib": [
      "dom",
      "es6",
      "es2017",
      "esnext.asynciterable"
    ],
    "skipLibCheck": true,
    "sourceMap": true,
    "outDir": "./dist",
    "moduleResolution": "node",
#### other stuff which I think is not relevant removed ####
Run Code Online (Sandbox Code Playgroud)

我还添加到"type": "module"了我的 package.json 中。事实上我现在有能力做顶级的等待

  1. 我需要更改每个导入以添加 .js 文件扩展名
  2. 对于我添加了 index.ts 来导出所有模块的文件夹,我以前可以只导入文件夹名称。现在我需要导入foldername/index.js
  3. 当我使用 vscode 自动添加导入时,它会在没有 .js 的情况下添加它

commonjs 的方式是如此优雅 - 我可以与 esnext 具有相同的行为,还是在获得顶级等待的同时以其他方式保留它?

小智 0

以下是 tsconfig.json 文件的示例:

{
  "compilerOptions": {
    "target": "esnext",
    "module": "esnext",
    "lib": [
      "dom",
      "es6",
      "es2017",
      "esnext.asynciterable"
    ],
    "skipLibCheck": true,
    "sourceMap": true,
    "outDir": "./dist",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "esModuleInterop": true
    },
  }
Run Code Online (Sandbox Code Playgroud)