gpt4 book ai didi

angular - 类型 'Observable>' 不可分配给类型 'Observable<>'

转载 作者:搜寻专家 更新时间:2023-10-30 21:47:48 25 4
gpt4 key购买 nike

我有这个代码片段:

SubmitTransaction(transNumber: string, transactionRequest: ITransactionRequestObj): Observable<TransactionResponse> {
this.body = JSON.stringify(transactionRequest);
this.headers = new HttpHeaders().set('Content-Type', 'application/json');
this.headers.append('Accept', 'application/json');
this.options = new RequestOptions({headers: this.headers});
return this.http.post<TransactionResponse>(this.baseUrl + '/transactions/' + transNumber + '/new', this.body, this.options)
.pipe(catchError((e) => this.errorHandler(e)));
}

我所做的就是将我的项目从 Angular 5 升级到 Angular 6,并将 .catch((e) => this.errorHandler(e)); 更改为 .pipe(catchError ((e) => this.errorHandler(e))); 。但是,对于此特定方法,我收到以下 TypeScript 错误。

错误:

[ts]
Type 'Observable<HttpEvent<TransactionResponse>>' is not assignable to type 'Observable<TransactionResponse>'.
Type 'HttpEvent<TransactionResponse>' is not assignable to type 'TransactionResponse'.
Type 'HttpSentEvent' is not assignable to type 'TransactionResponse'.
Property '_transactionNumber' is missing in type 'HttpSentEvent'.

我不确定在这种情况下我应该做什么。上面的代码片段在 Angular 5 中运行。我需要做什么才能为 Angular 6 修复它?

编辑:

errorHandler(error: HttpErrorResponse) {
return throwError(error.message || 'Server Error');
}

我注意到如果我不使用 HttpHeaders,它会起作用:

SubmitTransaction(transNumber: string, transactionRequest: ITransactionRequestObj): Observable<TransactionResponse> {
this.body = JSON.stringify(transactionRequest);
this.headers = new HttpHeaders().set('Content-Type', 'application/json');
this.headers.append('Accept', 'application/json');
this.options = new RequestOptions({headers: this.headers});
return this.http.post<TransactionResponse>(this.baseUrl + '/transactions/' + transNumber + '/new', transactionRequest)
.pipe(catchError((e) => this.errorHandler(e)));
}

但是,我可能需要使用 HttpHeaders...这种情况下的解决方法是什么?

最佳答案

HttpHeaders是一个不可变的数据结构。

append 方法返回一个新的 HttpHeaders 实例,而不是改变现有实例,这意味着您需要对代码进行微小的更改。

// old
this.headers.append('Accept', 'application/json')

// new
this.headers = this.headers.append('Accept', 'application/json')

更好的是,一次性完成:

this.headers = new HttpHeaders()
.set('Content-Type', 'application/json')
.set('Accept', 'application/json')

关于angular - 类型 'Observable<HttpEvent<>>' 不可分配给类型 'Observable<>',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51687403/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com