如何在 map 函数中指定数据类型?

Posted

技术标签:

【中文标题】如何在 map 函数中指定数据类型?【英文标题】:How would I specify data types in the map function? 【发布时间】:2021-02-27 19:05:18 【问题描述】:

我从服务器获取数据,该服务器是一个包含四个不同对象类型数组的对象。现在我尝试在订阅 observable 之前映射数据,以便我可以在前端使用正确的类:

getData()
    return this.http.get(this.authUrl + 'get/auf-data').pipe(
      map((material, mat_auf, lokals, auf_analysen) => 
        material.map(material => this.materialAdapter.adapt(material));
        mat_auf.map(auf => this.materialAufAdapter.adapt(auf));
        lokals.map(lokal => this.lokalAdapter.adapt(lokal));
        auf_analysen.map(analyse => this.aufAnalyseAdapter.adapt(analyse));
      )
    );
  

响应是包含四个不同数组的对象类型,但不知何故我得到了错误:

“对象”类型上不存在属性“材料”(重复:mat_auf、lokals 和 auf_analysen)

【问题讨论】:

您需要提供更多数据。在不知道来自服务器的数据结构以及您尝试转换为哪种形式的情况下,这个问题目前尚不清楚。 @MichaelD 适配器正在工作。唯一的问题是指定map函数的参数。我正在等待一个带有四个数组的对象。我如何指定参数materialmat_auflokalsauf_analysen 是数组,以便我可以映射它们并更改数组中的对象? 我的意思是,在使用 RXJS 地图时,我必须在某处指定我希望与他们一起使用的数据类型?如果我的假设是正确的,我将在哪里指定响应以在管道函数中映射该响应?例如,我如何让 map-Operator 知道我期望一个对象中有四个数组? 【参考方案1】:

定义响应时间的方式如下

  getData() 
    return this.http.get< material: any, mat_auf: any, lokals: any, auf_analysen: any; >('get/auf-data').pipe(
      map(( material, mat_auf, lokals, auf_analysen ) => 
        material.map(material => this.materialAdapter.adapt(material));
        mat_auf.map(auf => this.materialAufAdapter.adapt(auf));
        lokals.map(lokalisation => this.lokalAdapter.adapt(lokal));
        auf_analysen.map(analyse => this.aufAnalyseAdapter.adapt(analyse));
      )
    );
  

如果您查看 httpClient 的类型定义,您会看到 get 方法的定义之一是

 get<T>(url: string, options: 
        headers?: HttpHeaders | 
            [header: string]: string | string[];
        ;
        observe: 'events';
        params?: HttpParams | 
            [param: string]: string | string[];
        ;
        reportProgress?: boolean;
        responseType?: 'json';
        withCredentials?: boolean;
    ): Observable<HttpEvent<T>>;

当然,在定义响应正文时,不要使用any,而是使用您需要的任何内容。

【讨论】:

谢谢!你为我节省了几个小时!

以上是关于如何在 map 函数中指定数据类型?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ReactJS 中指定空属性类型?

如何在 TypeScript 中指定定义为对象文字的箭头函数的类型?

如何在等待中指定 Typescript Mongoose 模型类型

为啥我们需要在 bindParam() 中指定参数类型?

pandas使用select_dtypes函数移除dataframe中指定数据类型的数据列(exclude columns based on the data type in dataframe)

在 Redshift 'CREATE TABLE AS' 查询中指定数据类型