TS2345在将参数传递给resolve()时



我正在尝试在本地运行https://github.com/FullHuman/purgecss,但我收到一个错误:

error TS2345: Argument of type 'Stats | undefined' is not assignable to parameter of type 'Stats | PromiseLike<Stats>'

它所指的行调用具有潜在未定义参数的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>'
});
});
}

VSCode似乎指示resolve()参数的类型签名包括undefined

这不是Visual Studio代码,而是TypeScript编译器。由于您已将stats声明为类型为Stats的可选参数,该参数表示可以而不传递该参数,因此实际类型是Stats | undefined。但是,由于您使用new Promise<webpack.Stats>,这将解析此承诺的可能值限制为Stats,而不是undefined

TypeScript没有足够的信息来断定只有当stats而不是undefined时才会调用resolve(stats)。您应该重新构造条件语句以排除undefined值:

compiler.run((err?: Error, stats?: Stats) => {
if (err) reject(err);
if (stats)
if (stats.hasErrors()) reject(new Error(stats.toString()));
else resolve(stats);
});

相关内容

  • 没有找到相关文章

最新更新