【发布时间】:2021-03-13 01:41:43
【问题描述】:
我正在尝试在本地运行 https://github.com/FullHuman/purgecss 的单元测试,但出现错误:
error TS2345: Argument of type 'Stats | undefined' is not assignable to parameter of type 'Stats | PromiseLike<Stats>'
The line it's referring to 调用带有潜在未定义参数的 promise 的 resolve() 回调。但是,VSCode 似乎表明resolve() 的参数的类型签名包括undefined,因此它不应该引发类型错误。有没有什么好的方法来调试这个,或者权威地查看resolve()的类型签名?
这是引发类型错误的代码块:
function runWebpack(options: Configuration): Promise<webpack.Stats> {
const compiler = webpack(options);
return new Promise<webpack.Stats>((resolve, reject) => {
compiler.run((err?: Error, stats?: Stats) => {
if (err) reject(err);
if (stats?.hasErrors()) reject(new Error(stats.toString()));
resolve(stats); // error TS2345: Argument of type 'Stats | undefined' is not assignable to parameter of type 'Stats | PromiseLike<Stats>'
});
});
}
【问题讨论】:
-
不确定您是如何看到此错误的。它看起来很好,因为在参数
resolve周围定义的PromiseConstructor应该包含undefined -
请在此处包含问题中的所有相关代码。用户无需访问站外链接即可回答或理解任何答案。
-
"VSCode 似乎表明 resolve() 的参数的类型签名包括 undefined" 正好相反
stats是一个可选参数,因此可以not 在这种情况下将stats传递给undefined。错误告诉你 - 你不能传递可能是undefined的东西,因为它不是承诺的预期结果。
标签: javascript typescript visual-studio-code es6-promise