【问题标题】:error TS2345: Argument of type 'OperatorFunction<User, void>' is not assignable to parameter of type 'OperatorFunction<Object, void>'错误 TS2345:“OperatorFunction<User, void>”类型的参数不可分配给“OperatorFunction<Object, void>”类型的参数
【发布时间】:2021-04-28 19:12:49
【问题描述】:

我是 Angular 新手。

我该如何解决这个问题?

我已经安装了Angular CLI: 11.0.7Node: 12.18.4

错误:

错误:src/app/_services/account.service.ts:19:7 - 错误 TS2345: 'OperatorFunction' 类型的参数不可分配给 'OperatorFunction' 类型的参数。 “对象”类型可分配给极少数其他类型。您的意思是改用“任何”类型吗? “对象”类型缺少“用户”类型的以下属性:用户名、令牌

 19       map((response: User) => {
          ~~~~~~~~~~~~~~~~~~~~~~~~~
 20         const user = response;
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
...
 24         }
    ~~~~~~~~~
 25       })
    ~~~~~~~~

account.service.ts

import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import {map} from 'rxjs/operators';
import { User } from '../_models/user';
import { ReplaySubject } from 'rxjs';


export class AccountService {
  baseUrl = 'https://localhost:5001/api/';
  private currentUserSource = new ReplaySubject<User>(1);
  currentUser$ = this.currentUserSource.asObservable();

  constructor(private http: HttpClient) { }

  login(model: any) {
    return this.http.post(this.baseUrl + 'account/login', model).pipe(
      map((response: User) => {
        const user = response;
        if (user) {
          localStorage.setItem('user', JSON.stringify(user));
          this.currentUserSource.next(user);
        }
      })
    )
  }
}

user.ts

export interface User{
    username: string;
    token: string;
}

【问题讨论】:

    标签: angular typescript


    【解决方案1】:

    你需要把 http.post 返回

      login(model: any) {
        //-------------- here ⇊⇊ ------
        return this.http.post<User>(this.baseUrl + 'account/login', model).pipe(
          map((user : User) => {
            if (user) {
              localStorage.setItem('user', JSON.stringify(user));
              this.currentUserSource.next(user);
            }
          })
        )
      }
    

    【讨论】:

    • 天哪,谢谢...刚刚对我正在进行的一个项目进行了严格限制,但无法解决这个问题。
    【解决方案2】:

    http.post 可以被类型转换为 User 或任何

    也试试

    login(model: any){
        return this.http.post(this.baseUrl + 'account/login', model).pipe(
          map((response: User)=>{
            const user = response as User;
            if(user){
              localStorage.setItem('user', JSON.stringify(user));
              this.currentUserSource.next(user);
            }
          })
        )
      }
    

    【讨论】:

      【解决方案3】:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-24
        • 2021-11-11
        • 2018-10-29
        • 2021-04-18
        • 2021-07-16
        相关资源
        最近更新 更多