Angular中‘Type 'EventEmitter' is not generic’错误求助
解决Angular 5.x中EventEmitter泛型报错的问题
你遇到的这个问题其实是Angular版本差异导致的——你当前使用的Angular CLI 1.7.4对应的是Angular 5.x核心版本,而在Angular 5及更早的版本里,EventEmitter的类型定义是不支持泛型参数的,这就是VS Code提示“Type 'EventEmitter' is not generic”错误的原因。而Angular官网的示例通常基于较新版本(Angular 6+)编写,这些版本才正式支持EventEmitter的泛型语法。
下面给你两个可行的解决办法:
办法一:移除泛型参数(无需升级版本)
直接去掉<string>泛型声明,代码修改为:
@Output() ratingClicked: EventEmitter = new EventEmitter();
虽然没有显式声明泛型,但调用ratingClicked.emit('your string value')时,TypeScript依然会根据传入的值做类型推断,不会影响实际功能。如果需要更严格的类型约束,也可以写成EventEmitter<any>,在emit时确保传入字符串类型即可。
办法二:升级Angular到6+版本(推荐长期方案)
如果项目允许升级,建议把Angular升级到6及以上版本,就能和官网示例一样使用泛型EventEmitter了。升级步骤大致如下:
- 先升级Angular CLI:
npm install -g @angular/cli@6 - 再升级项目核心依赖:
注:升级过程中可能需要处理少量依赖兼容性问题,不过你的Node 8.11.1和TypeScript 2.8.1符合Angular 6的版本要求,兼容性风险较低。ng update @angular/core@6
补充说明:Angular 5.x里的EventEmitter本质继承自RxJS的Subject,只是没有对外暴露泛型接口,所以移除泛型参数完全不影响事件传递功能,仅少了一层编译期的类型校验而已。
内容的提问来源于stack exchange,提问作者thegreathypocrite
相关产品推荐
相关产品推荐

