Angular 5项目执行ng build --prod时出现TypeScript错误
解决Angular 5执行
ng build --prod时的TypeScript类型错误 我之前也碰到过这个一模一样的坑!当时用Angular 5跑生产构建的时候突然报了这个Cannot read property 'type' of undefined的错误,折腾了好一会儿才搞定,给你几个亲测有效的排查和解决方向:
1. 先核对TypeScript版本兼容性
Angular 5对TypeScript的版本有严格要求,太高或太低都会出问题。官方推荐的是2.4.x到2.6.x的版本,其中2.6.2是和Angular 5匹配度最高的稳定版。
- 先检查当前项目的TS版本:
npm list typescript - 如果版本不对,安装指定版本:
npm install typescript@2.6.2 --save-dev
2. 排查代码中的类型注解缺失
这个错误本质是TypeScript在推断函数参数的上下文类型时出了问题,大概率是你代码里有未明确标注类型的函数参数,尤其是对象字面量里的方法或者箭头函数。
比如这种写法就容易触发错误:
const userUtils = { formatName: (name) => { // name没有类型注解 return name.trim(); } };
改成带明确类型的写法就能解决:
const userUtils = { formatName: (name: string) => { return name.trim(); } };
如果暂时不确定类型,可以先用any过渡(不推荐长期使用,后期尽量优化):
const userUtils = { formatName: (name: any) => { return name.trim(); } };
3. 检查第三方依赖的类型定义
如果项目里用了一些老旧的第三方库,它们的类型定义(@types/xxx包)可能和当前TS版本不兼容,或者本身有缺陷。
- 先删除
node_modules文件夹和package-lock.json(或yarn.lock),然后重新安装依赖:rm -rf node_modules package-lock.json npm install - 如果某个特定库一直出问题,可以查看它的npm页面,找和Angular 5/TS 2.6.x兼容的版本,或者暂时移除这个库试试。
4. 临时调整TS严格模式(不推荐长期使用)
如果上面的方法都没效果,可以临时降低TypeScript的严格检查等级,先让构建通过:
打开tsconfig.json,修改以下配置:
{ "compilerOptions": { "strict": false, "noImplicitAny": false } }
不过这只是应急方案,还是建议找到根源解决,严格模式能帮你避免很多潜在的代码问题。
补充一下:这个错误出自TypeScript的类型检查器,当它尝试获取某个节点的有效类型注解时,找不到对应的
type属性,基本都是类型信息缺失或者版本不匹配导致的。
内容的提问来源于stack exchange,提问作者Amith Dissanayaka
相关产品推荐
相关产品推荐

