Angular (TypeScript) - 在某些情况下出现“TypeError X 不是函数”,但在其他情况下则不会出现

问题描述 投票:0回答:1

我在 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 的缓存问题。

有人遇到过这个问题吗?

谢谢。

凯文

angular typescript service typeerror
1个回答
0
投票

非常感谢您的帮助。你为我指明了正确的方向。我不认为导入会成为问题,因为我多次重新导入文件以确保关系正确。

但是,根据您的评论,我开始审查每个导入并进行额外的测试。虽然导入是正确的,但我发现此错误是由应用程序中的循环逻辑引起的。

user.service.ts 使用 http.service.ts 作为提供者,并且 http.service.ts 正在将 user.service.ts 注册为提供者(在 http.service.ts 中对用户信息进行编排调用之后,它是被传回 user.service.ts 以执行另一个函数)。

本质上,这两项服务都是相互依赖的。

我将重构一切以确保这种情况不会发生。

再次感谢,我希望这个解释对那里的人有所帮助:)

© www.soinside.com 2019 - 2024. All rights reserved.