错误 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<APIResponse>' is not assignable to type 'Observable<User>'.
但是,如果我使服务的返回类型与输入参数类型相同,即 Observable<User>
。然后没有错误。
在应用程序中,每个服务都有不同的数据类型(输入),但每个服务都会有 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”中的相同属性