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

问题描述 投票:0回答:2

我想在我的 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 ####

我现在将其切换到

{
  "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 ####

我还将

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

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

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

javascript node.js typescript tsc
2个回答
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
    },
  }

0
投票

我不知道这是否是一个选项,但我认为最简单的方法是将应用程序的入口包装到某种异步的

main()
函数中并执行该函数。在这个函数中,您可以根据需要使用await。

© www.soinside.com 2019 - 2024. All rights reserved.