build 报错
项目的 TypeScript 版本太低解析不了 types/lodash 和 element-plus 最新类型声明里用到的 ${infer N extends number} 语法。这不是这两个库坏了而是它们用到了 TypeScript 4.8 才完整支持的模板字符串类型中带约束的 infer语法 。ERRORFailed to compilewith6errors11:24:32errorinnode_modules/types/lodash/common/common.d.ts:266:65TS1005:?expected.264|[PinkeyofT]?:T[P]extendsobject?object:T[P]265|};266|type StringToNumberTTextends${inferNextendsnumber}?N:never;|^267|// For backwards compatibility268|type LoDashImplicitArrayWrapperTLoDashImplicitWrapperT[];269|type LoDashImplicitNillableArrayWrapperTLoDashImplicitWrapperT[]|null|undefined;errorinnode_modules/types/lodash/common/object.d.ts:1026:46TS1005:?expected.1024|type GetFieldTypeOfArrayLikeByKeyTextendsunknown[],K1025|Kextendsnumber?T[K]1026|:Kextends${inferNextendsnumber}?T[N]|^1027|:KextendskeyofT?T[K]:undefined;1028|1029|type GetFieldTypeOfStringByKeyTextendsstring,Kerrorinnode_modules/types/lodash/common/object.d.ts:1031:46TS1005:?expected.1029|type GetFieldTypeOfStringByKeyTextendsstring,K1030|Kextendsnumber?T[K]1031|:Kextends${inferNextendsnumber}?T[N]|^1032|:KextendskeyofT?T[K]1033|:undefined;1034|errorinnode_modules/types/lodash/common/object.d.ts:1041:46TS1005:?expected.1039|:Kextendsnumber1040|?${K}extendskeyofT?T[${K}]:undefined1041|:Kextends${inferNextendsnumber}|^1042|?NextendskeyofT?T[N]:undefined1043|:undefined;1044|errorinnode_modules/element-plus/es/components/mention/src/mention.d.ts:30:45TS1005:;expected.28|*description customize filter option logic.29|*/30|filterOption?:false|typeoffilterOptionT;|^31|/** 32 | * description set popup placement 33 | */errorinnode_modules/element-plus/es/components/mention/src/mention.d.ts:30:48TS1005:(expected.28|*description customize filter option logic.29|*/30|filterOption?:false|typeoffilterOptionT;|^31|/** 32 | * description set popup placement 33 | */ERRORError:Build failedwitherrors.Error:Build failedwitherrors.首选方案升级 TypeScript推荐# 先确认当前版本 npm list typescript # 升级到5.x最新稳定 npm install typescript^5.0.0--save-dev # 如果项目因为其他老依赖不能直接上5.x最低也要升到4.8 npm install typescript4.8.4--save-devtypes/lodash 的作者明确说过这个新语法在 TS 4.8–5.5 测试通过4.7 及以下不支持​ 。所以 4.8 是硬下限。# 升级完别忘了把相关的TS插件一并升一下尤其是用 Vite/Vue 的项目 npm install vue-tsclatest--save-dev然后清缓存重启rm-rf node_modules/.cache npm run dev备选方案降级 types/lodash应急报错信息ERRORFailed to compilewith4errors11:18:09errorinnode_modules/types/lodash/common/common.d.ts:266:65TS1005:?expected.264|[PinkeyofT]?:T[P]extendsobject?object:T[P]265|};266|type StringToNumberTTextends${inferNextendsnumber}?N:never;|^267|// For backwards compatibility268|type LoDashImplicitArrayWrapperTLoDashImplicitWrapperT[];269|type LoDashImplicitNillableArrayWrapperTLoDashImplicitWrapperT[]|null|undefined;errorinnode_modules/types/lodash/common/object.d.ts:1026:46TS1005:?expected.1024|type GetFieldTypeOfArrayLikeByKeyTextendsunknown[],K1025|Kextendsnumber?T[K]1026|:Kextends${inferNextendsnumber}?T[N]|^1027|:KextendskeyofT?T[K]:undefined;1028|1029|type GetFieldTypeOfStringByKeyTextendsstring,Kerrorinnode_modules/types/lodash/common/object.d.ts:1031:46TS1005:?expected.1029|type GetFieldTypeOfStringByKeyTextendsstring,K1030|Kextendsnumber?T[K]1031|:Kextends${inferNextendsnumber}?T[N]|^1032|:KextendskeyofT?T[K]1033|:undefined;1034|errorinnode_modules/types/lodash/common/object.d.ts:1041:46TS1005:?expected.1039|:Kextendsnumber1040|?${K}extendskeyofT?T[${K}]:undefined1041|:Kextends${inferNextendsnumber}|^1042|?NextendskeyofT?T[N]:undefined1043|:undefined;1044|ERRORError:Build failedwitherrors.解决方案// 重新安装lodash版本适应typescript版本4.1cnpm i-Dtypes/lodashts4.1内存溢出1、安装cross-env和increase-memory-limitnpm install cross-env increase-memory-limit2、package.json添加如下内容scripts:{serve:vue-cli-service serve,build:vue-cli-service build,fix-memory-limit:cross-env LIMIT20000 increase-memory-limit},3、执行命令npm run fix-memory-limit4、执行后报错‘“node --max-old-space-size4096”’ 不是内部或外部命令也不是可运行的程序或批处理文件。方案1、在项目的node_modules/.bin下面找到所有的%_prog% 改为 %_prog%, 去掉双引号。方案2、避免替换代码出现风险build:prod: vue-cli-service build, 替换为 build:prod: node --max_old_space_size4096 node_modules/vue/cli-service/bin/vue-cli-service.js build, serve: vue-cli-service serve, 替换为 serve: node --max_old_space_size4096 node_modules/vue/cli-service/bin/vue-cli-service.js serve --open,