错误 TS2416 类型 'Observable<APIResponse>' 不可分配给类型 'Observable<User>'

Posted

技术标签:

【中文标题】错误 TS2416 类型 \'Observable<APIResponse>\' 不可分配给类型 \'Observable<User>\'【英文标题】:error TS2416 Type 'Observable<APIResponse>' is not assignable to type 'Observable<User>'错误 TS2416 类型 'Observable<APIResponse>' 不可分配给类型 'Observable<User>' 【发布时间】:2020-01-15 07:23:54 【问题描述】:

我有一个Angular 8 应用程序。这是服务的样子:-

export class UserService
  constructor(private http: HttpClient)  

  public AddUser(user: User): Observable<APIResponse> 
    return this.http.post<APIResponse>(
      API.User + "register", 
      user //data
    ).pipe();
  

但这会引发以下错误。

错误 TS2416 Type 'Observable&lt;APIResponse&gt;' is not assignable to type 'Observable&lt;User&gt;'.

但是,如果我使服务的返回类型与输入参数类型相同,即 Observable&lt;User&gt; 。然后没有错误。

在应用程序中,每个服务都有不同的数据类型(输入),但每个服务都会有 APIResponse 作为返回类型。

是什么导致了这个错误?我怎样才能摆脱它?

谢谢!

【问题讨论】:

您在使用AddUSer 方法时是否遇到此错误?以及您在管道中返回的内容 您是否将 APIResponse 转换为 User 输入 pipe @jitender no while 编译本身 这不能解决你的问题,但如果你不把任何东西放在管道里,你可以摆脱它。 似乎您的 API 正在发送您的 User 类型的 Observable 作为响应。您是否应该在管道中将数据类型转换为APIResponse?请检查您是否缺少此 【参考方案1】:

从您发布的代码来看,很可能在您的应用程序中的某个时刻您正在使用此 addUser(...) 方法,并且预计会返回 Observable。 ApiResponse 和 User 显然具有不同的结构。

您说所有服务都返回相同的 ApiResponse 类型 - 那里的数据是否完全相同?还是根据服务输入类型仍有一些差异?如果是后者(我相信是这样,因为您也必须获取数据),您应该检查 typescript 泛型,它可能对您有很大帮助:https://www.typescriptlang.org/docs/handbook/generics.html

【讨论】:

那里的数据完全一样吗?是的。数据的结构将保持不变 在这种情况下,您应该找到 Observable 与 Observable 相遇的地方,看看那里出了什么问题。

以上是关于错误 TS2416 类型 'Observable<APIResponse>' 不可分配给类型 'Observable<User>'的主要内容,如果未能解决你的问题,请参考以下文章

错误 TS2416:“ApolloError”类型中的属性“originalError”不可分配给基类型“GraphQLError”中的相同属性

ts 属性 'map' 不存在于类型'Observable<Response>' [重复]

TS2416:“MyGuard”类型中的属性“canActivate”不可分配给基类型“CanActivate”中的相同属性

Observable 类型上不存在 TS2339 属性 xxx 的问题

模板似乎只等待 Observable 产生一次

从角度 4 中的“rxjs/Observable”导入 Observable 时出错