webpack中使用ts-loader报错TS2550:PromiseConstructor不存在allSettled属性
TS2550 报错解决方案
问题根因
你当前的tsconfig配置本身符合要求,TypeScript 4.3.4原生支持es2020.Promise的类型定义,仅在webpack编译时出现报错,90%以上场景是ts-loader未正确加载到你的tsconfig配置文件导致。
解决步骤
第一步:修正webpack中ts-loader配置
手动指定tsconfig.json的绝对路径,避免ts-loader因工作目录问题找不到配置文件:
// webpack.config.js 对应规则配置 const path = require('path'); module.exports = { // 其余webpack配置省略 module: { rules: [ { test: /\.tsx?$/, exclude: /node_modules/, use: [ { loader: 'ts-loader', options: { // 替换为你项目中tsconfig.json的实际绝对路径 configFile: path.resolve(__dirname, './tsconfig.json'), // 可选:开启后可以在控制台看到tsconfig加载日志,排查路径问题 logLevel: 'info' } } ] } ] } }
配置后重启webpack编译,绝大多数场景下报错会直接消失。
第二步:兜底类型补充(可选)
如果确认配置读取正常仍有报错,可以手动补充全局类型声明:
- 在项目根目录新建
typings.d.ts文件 - 写入以下类型定义:
declare interface PromiseConstructor { allSettled<T extends readonly unknown[] | []>(values: T): Promise<{ -readonly [P in keyof T]: PromiseSettledResult<Awaited<T[P]>> }>; allSettled<T>(values: Iterable<T | PromiseLike<T>>): Promise<PromiseSettledResult<Awaited<T>>[]>; }
- 在tsconfig.json的
include字段中添加该声明文件路径:
{ "include": ["src/**/*", "typings.d.ts"] }
内容的提问来源于stack exchange,提问作者nadiTime
相关产品推荐
相关产品推荐

