【发布时间】:2022-01-26 03:48:21
【问题描述】:
我有一个简单的脚本尝试使用 Node 和 TypeScript 测试顶级等待。
import { readFile } from "fs/promises";
async function getNum(filename: string) {
return parseInt(await readFile(filename, "utf8"), 10);
}
try {
const numberPromises = [1, 2, 3].map((i) => getNum(`${i}.txt`));
const numbers = await Promise.all(numberPromises);
console.log(numbers[0], numbers[1], numbers[2]);
} catch (err) {
console.error("Something went wrong");
console.error(err);
}
当我尝试使用 TypeScript 编译时出现此错误:
错误 TS1378:仅当 'module' 选项设置为 'es2022'、'esnext'、'system' 或 'nodenext' 并且设置了 'target' 选项时,才允许使用顶级 'await' 表达式到 'es2017' 或更高版本。
由line9上的顶级await触发:
const numbers = await Promise.all(numberPromises);
我很困惑,因为我已经完成了错误消息中提到的两件事,并且我试图尽可能地配对我的tsconfig.json。
{
"compilerOptions": {
"module": "es2022",
"target": "es2017",
"outDir": "dist",
"strict": true,
"moduleResolution": "Node"
}
}
我的 package.json 文件中也有 type: module。
{
"name": "ts-test",
"version": "1.0.0",
"type": "module",
"devDependencies": {
"@types/node": "^17.0.5",
"typescript": "^4.6.0-dev.20211226"
},
"scripts": {
"dev": "node dist/script.js",
"compile": "tsc script.ts"
},
"author": "Todd Matthews",
"license": "ISC",
"volta": {
"node": "17.3.0"
}
}
任何关于如何使用 Node 和 TypeScript 测试顶级 await 的帮助将不胜感激!
【问题讨论】:
-
我认为你可以尝试在 tsconfig.json 中设置 module: 'commonjs'
标签: node.js typescript async-await