我有一项服务公开了一些使用HttpClient
请求的函数,其中一个是post
:
post<T>(url: string, data: any, params?: {[key: string]: any}): Observable<HttpEvent<T>> {
return this.http.post<T>(this.host + url, data, this.getRequestOptions(params));
}
这里重要的是返回签名Observable<HttpEvent<T>>
。
然后,当我调用该函数时,我遇到两个问题:
this.api.post<string>('/tokens', credentials).subscribe((token: string) => {});
第一个问题是,由于lint错误,我无法传入<string>
的类型:
Expected 0 type arguments but got 1
第二个问题是响应中的所有数据都变为类型HttpEvent<T>
,而不是我发送的数据,在此示例中,它应该是string
类型。
所以在上面的例子中我得到了这个错误:
类型的参数'(token:string)=&gt; void'不可分配给 参数类型'(值:HttpEvent&lt; {}&gt;)=&gt;无效”。种类 参数'token'和'value'不兼容。 输入'HttpEvent&lt; {}&gt;'不能指定为'string'类型。 类型'HttpProgressEvent'不能指定为'string'类型。
如何解决这个问题,以便我可以正确设置我的响应类型?
答案 0 :(得分:1)
试试这个:
post<T>(url: string, data: any, params?: {[key: string]: any}): Observable<T> {
return this.http.post<T>(this.host + url, data, this.getRequestOptions(params)).map((res: T) => res);
}