Angular4服务开发报错:类型'1'无法分配给参数类型'number[]'求排查
问题排查:Angular 4 Service中Observer.next类型不匹配错误
嘿,我一眼就看出问题所在啦!你遇到的这个类型错误,本质是你定义的Observable类型和实际传递给next()的值类型不匹配。
错误原因拆解
你在DataService里把data定义成了Observable<Array<number>>,这意味着这个Observable被声明为只能发射**数字数组(number[])**类型的值。但你调用observer.next(1)时,传入的是单个数字1,它属于number类型,和number[]类型不兼容,所以TypeScript会抛出这个类型错误。
两种解决方案,你可以根据需求选:
方案1:传递符合类型要求的数组
如果你确实需要这个Observable发射数组,那把单个数字包装成数组传入next()就行:
// 把单个数字1包装成数组 observer.next([1]); // 或者如果是多个数字,比如[1,2,3]也可以 observer.next([1, 2, 3]);
方案2:修改Observable的类型定义
如果你本来就希望这个Observable发射单个数字而不是数组,那直接修改data的类型声明:
// 把Array<number>改成number,让Observable发射单个数字 data: Observable<number>;
这样后续调用observer.next(1)就完全符合类型要求了。
补充小提示
在Angular(尤其是配合TypeScript)开发时,类型不匹配的错误其实是TypeScript在帮你提前规避潜在的运行时问题,遇到这类错误先检查变量/Observable的类型声明和实际传入的值是否一致,大部分时候都能快速定位问题~
内容的提问来源于stack exchange,提问作者Ahmad Habib
相关产品推荐
相关产品推荐

