我在 Angular 14 中遇到了一种奇怪的情况,出现了类型错误。我能够重构代码并解决它,但我很好奇为什么会发生这种情况,以便我将来可以避免这个问题。
我看到的错误是:ERROR TypeError: this.httpService.user_getUserInfo is not a function
该文件名为 user.service.ts。
请找到下面的代码示例(为了简单起见,我删除了文件导入和不相关的代码)。
@Injectable({
providedIn: 'root'
})
export class UserService {
constructor(private httpService: HttpService) { }
getUserInfo(user: string): Observable<UserInfo> {
return this.httpService.user_getUserInfo(user);
}
}
令人困惑的是,在某些情况下不会发生此错误。
我今天玩了一段时间并发现:
如果将上述功能添加到另一个名为 users.service.ts(即复数)的文件中,错误就会消失并且所有内容都会正确加载。
另一方面,如果将users.service.ts中的代码复制到user.service.ts,则没有任何作用(表明文件有问题,而不是代码)
将所有功能移至名为 test.service.ts 的新文件并不能解决问题。
重命名文件无法解决问题。
我们维护的其他应用程序有一个名为 user.service.ts 的服务文件,尽管代码相似,但不会生成任何错误。
其他文件中 user.service.ts 的所有导入都是正确的。
似乎不是 Angular、浏览器或 Visual Studio Code 的缓存问题。
有人遇到过这个问题吗?
谢谢。
凯文
非常感谢您的帮助。你为我指明了正确的方向。我不认为导入会成为问题,因为我多次重新导入文件以确保关系正确。
但是,根据您的评论,我开始审查每个导入并进行额外的测试。虽然导入是正确的,但我发现此错误是由应用程序中的循环逻辑引起的。
user.service.ts 使用 http.service.ts 作为提供者,并且 http.service.ts 正在将 user.service.ts 注册为提供者(在 http.service.ts 中对用户信息进行编排调用之后,它是被传回 user.service.ts 以执行另一个函数)。
本质上,这两项服务都是相互依赖的。
我将重构一切以确保这种情况不会发生。
再次感谢,我希望这个解释对那里的人有所帮助:)