繁体   English   中英

错误 TS2345:类型为“OperatorFunction”的参数 <object, object> ' 不能分配给 'OperatorFunction 类型的参数 </object,>

[英]error TS2345: Argument of type 'OperatorFunction<Object, Object>' is not assignable to parameter of type 'OperatorFunction

我怎么解决这个问题?

 Angular CLI: 14.0.2 Node: 16.13.0 rxjs: 7.5.5 typescript: 4.7.4

我的进口:

 import { Observable, BehaviorSubject } from "rxjs"; import { first, catchError, tap } from "rxjs/operators";

first()错误,

 login( email: Pick<User, "email">, password: Pick<User, "password"> ): Observable<{ token: string; userId: Pick<User, "id">; }> { return this.http.post(`${this.url}/login`, { email, password }, this.httpOptions).pipe( first(), tap((tokenObject: { token: string; userId: Pick<User, "id"> }) => { this.userId = tokenObject.userId; localStorage.setItem("token", tokenObject.token); this.isUserLoggedIn$.next(true); this.router.navigate(["/"]); }), catchError( this.errorHandlerService.handlerError<{ token: string; userId: Pick<User, "id">; }>("login") ) ); }

关于指南,您将返回的 function 类型指定为

Observable<{ token: string; userId: Pick<User, "id">; }>

您还需要在post<T>first<T>运算符中指定预期的返回值类型。

您需要指定post的返回类型,使其与 function 的返回类型匹配。

 return this.http.post<{ token: string; userId: Pick<User, "id">; }>(... ).pipe(... )

pipe 中的返回类型可以由编译器推断,但如果没有明确说明,则无法判断post的返回类型。

我建议你做一个类型,这样代码就不会那么冗长

type TokenAndId = { token: string; userId: Pick<User, "id">; }
 login( email: Pick<User, 'email'>, password: Pick<User, 'password'> ): Observable<TokenAndId> { return this.http.post<TokenAndId>( `${this.url}/login`, { email, password }, this.httpOptions ).pipe( first(), tap((tokenObject: TokenAndId) => { this.userId = tokenObject.userId; localStorage.setItem('token', tokenObject.token); this.isUserLoggedIn$.next(true); this.router.navigate(['/']); }), catchError(this.errorHandlerService.handlerError<TokenAndId>('login')) ); }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM