bounty还有6天到期。回答此问题可获得+50声望奖励。Wojtek Dmyszewicz想要引起更多关注这个问题:如果答案能带来更好的错误处理,或者解释了--lib选项所指的位置,我会很高兴。
当用tsc -p .
编译typescript文件时,我得到以下错误
错误TS 2705:ES 5/ES 3中的异步函数或方法需要'Promise'构造函数。确保你有一个'Promise'构造函数的声明,或者在'--lib'选项中包含'ES 2015'。
9异步函数fetchImages(param 1:string):Promise<string[]> {
使用lib选项tsc --lib es5
进行编译并不能解决这个问题
谁能解释一下--lib选项,以及它是如何修复它的,因为它在我的例子中没有。
还是错误指向了另一个lib选项?
node -v
v19.9.0
tsc -v
Version 5.1.0-dev.20230512
tsconfig:
{
"compilerOptions": {
/* Visit https://aka.ms/tsconfig to read more about this file */
/* Language and Environment */
"target": "es5", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
/* Modules */
"module": "es6", /* Specify what module code is generated. */
"rootDir": ".", /* Specify the root folder within your source files. */
"baseUrl": ".", /* Specify the base directory to resolve non-relative module names. */
/* Emit */
"sourceMap": true, /* Create source map files for emitted JavaScript files. */
"outDir": "dist", /* Specify an output folder for all emitted files. */
/* Interop Constraints */
"esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */
"forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */
/* Type Checking */
"strict": true, /* Enable all strict type-checking options. */
/* Completeness */
"skipLibCheck": true /* Skip type checking all .d.ts files. */
}
}
1条答案
按热度按时间flvlnr441#
如前所述,您的
tsconfig.json
设置并不真正适用于Node 19项目(一般情况下可能也不适用于Node项目)。然而,你的问题是一个更微妙的是准确的。考虑以下情况:
确切的原因是,原生
Promise
支持直到ES6
(又名ES2015
)才引入,而不是ES5
,尽管async
可用。尝试从函数中删除返回类型:
有趣的是,这段代码可以编译。如果你看一下编译后的JS,它看起来像这样:
编译器正在对
awaiter
和generators
进行匀场,这两个文件在ES6
之前都不可用。注意这里没有Promise
或Generator
类型。将您的
target
更改为es6
,其中添加了原生Promise支持,可以解决此问题。编译后的JS看起来像这样:您可以在这里看到发出的原生
Generator
(function*
)。总之,您的目标是
ES5
,它没有原生Promise
支持,因此使用该类型会出现错误。解决方案是提供一个Promise
兼容的实现或使用ES6
。但是,如果你真的在写一个Node 19应用程序,你可能应该使用完全不同的编译器选项。