【问题标题】:Type 'BaseResponse<IavailableParameters[]>' is missing the following properties from type 'IavailableParameters[]': length, pop, etc类型“BaseResponse<IavailableParameters[]>”缺少类型“IavailableParameters[]”中的以下属性:长度、弹出等
【发布时间】:2021-02-15 12:44:00
【问题描述】:

我正在对我的 API 进行 get 调用并返回一个对象列表。然后我将该数据分配给我的 DataService 中的一个属性,以便我可以跨组件使用它。

这是我的组件中调用服务的代码:

  getAvailableParameters() {
     this.verificationService.getAvailableParameters(this.itemNumbers).subscribe((res => {
      this.dataService.availableParameters = res;
    }))}

这是对 API 的调用

  getAvailableParameters(itemNumbers: string[]){
    return this.http.get<BaseResponse<IavailableParameters[]>>(`${this.baseUrl}api/verification/${itemNumbers}`)
  }

这是调用 getAvailableParameters 后应该存储对象的 DataService 中的属性:

export class DataService {
  public orderInfo: Iorder;
  public availableParameters: IavailableParameters[];
}

如您所见,从 API 返回的对象也包装在 BaseResponse 对象中(我认为这是问题所在,但不知道如何解决),在此处定义:

import { Error } from './Error'

export interface BaseResponse<T> {
    isSuccessful: boolean,

    error: Error;

    results: T;
}

这是我得到的确切错误:

    ERROR in src/app/Components/verification-reply/verification-reply.component.ts(28,7): error TS2740: Type 'BaseResponse<IavailableParameters[]>' is missing the following properties from type 'IavailableParameters[]': length, pop, push, concat, and 26 more.

当我删除基本响应类型时,它可以正常工作,因为我假设它没有将其注册为数组或其他东西。当我返回的对象不是数组时,这种与数据服务对象的绑定方法可以正常工作。

我在这个主题上缺乏经验,可以使用一些帮助来弄清楚如何解决这个错误。

【问题讨论】:

  • 正如 Lindas 评论所建议的,基本响应上的“结果”对象包含我正在寻找的实际对象。我需要获取 res.results,而不是映射 res => IavailableParameters。

标签: javascript angular typescript api observable


【解决方案1】:

当我删除基本响应类型时,它可以正常工作,因为我假设它没有将其注册为数组或其他东西。

这是意料之中的,因为BaseResponse&lt;IavailableParameters[]&gt; 不是一个数组。它是一个object,具有isSuccessfulerrorresults 属性。 属性 results 是一个数组 IavailableParameters[]

您需要确保您提供给this.http.get 的任何类型都与请求返回的实际类型相匹配。它是IavailableParameters 的数组吗?还是带有isSuccessfulerrorresults 的对象?

如果您有一个 BaseResponse&lt;IavailableParameters[]&gt; 类型的变量 response 并且您正尝试将其用作数组 IavailableParameters[],就像您发布的错误消息中一样,那么只需使用 response.results 而不是整个响应对象。

【讨论】:

    猜你喜欢
    • 2022-11-28
    • 1970-01-01
    • 2021-04-20
    • 2021-07-29
    • 1970-01-01
    • 2020-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多