代码之家  ›  专栏  ›  技术社区  ›  GooseKing 1337

无法在TypeScript中映射

  •  1
  • GooseKing 1337  · 技术社区  · 2 年前

    我目前正在学习一个教程,但我遇到了这个错误:

    TS2345:类型为“OperatorFunction<WorkerData,WorkerData>'不可分配给'OperatorFunction<类型的参数;对象,WorkerData>'。 “Object”类型可分配给极少数其他类型。你的意思是用“any”类型代替吗? 类型“Object”缺少类型“WorkerData”中的以下属性:项、元、链接

    WorkerData是位于同一文件中的一个简单接口:

    export interface WorkerData {
      items: Worker[],
      meta: {
        totalItems: number;
        itemCount: number;
        itemsPerPage: number;
        totalPages: number;
        currentPage: number;
      }, 
      links: {
        first: string;
        previous: string;
        next: string;
        last: string;
      }
    };
    

    返回此错误的函数如下:

    findAll(page: number, size: number): Observable<WorkerData> {
        let params = new HttpParams();
        params = params.append('page', String(page));
        params = params.append('limit', String(size));
        return this.http.get('/api/worker', {params}).pipe(
          map((userData: WorkerData) => userData),
          catchError(err => throwError(err)),
        )
      }
    

    这个函数。应该返回带有Worker数组和一些meta的JSON。如果我更改映射((userData:WorkerData)=>userData)映射(((userData:any)=>userData),r如果我使接口中的所有参数都不是meccecary,它会工作,但会返回如下内容:

    _Observable {
      source: _Observable {
        source: _Observable {
          source: [_Observable],
          operator: [Function (anonymous)]
        },
        operator: [Function (anonymous)]
      },
      operator: [Function (anonymous)]
    }
    

    如果有人好奇的话,这个系列教程叫做博客项目V-09。也许这有帮助。如果你需要更多的信息,我很乐意提供。如果需要,我也可以发布到git。提前感谢

    1 回复  |  直到 2 年前
        1
  •  0
  •   Johan Sebastian Gonzalez    2 年前

    默认的http.get方法不知道返回的类型,所以请尝试以下代码,这是基于官方的Angular文档

    return this.http.get<WorkerData>('/api/worker', { params }).pipe(
      map((userData: WorkerData) => userData),
      catchError(err => throwError(err)),
    );
    

    Angular documentation