当前位置: 首页 > 知识库问答 >
问题:

理解复杂类型脚本类型声明

傅正阳
2023-03-14

问题是如何使用对象类型发送Header,而不是HTTPClient声明中提供的HttpHeaders。

getLoggedInUser(requestHeaderParam: GetLoggedInUserHeaderRequestParam): Observable<LoggedInUserResponse> {
   return this.http.get<LoggedInUserResponse>(`${environment.apiBaseUrl}/auth/loggedInUser`,
    { headers: requestHeaderParam }); 
}

我在VS代码中得到的错误信息如下所示

“{headers:GetLoggedInUserHeaderRequestParam;}”类型的[ts]参数不可分配给“{headers?:HttpHeaders{[Header:string]:string string[];};};”类型“的参数;”观察?:“body”;Params?:Ht.“。属性”headers“的类型不兼容。类型”GetLoggedInUserHeaderRequestParam“不可分配给类型”HttpHeaders{[Header:string]:string string[];}“。类型”

请求参数类型如下所示

export interface GetLoggedInUserHeaderRequestParam {
  uid: string;
  PSID?: string;
}

如下所示的HttpClient声明。

HttpClient.get(url: string, options: {
   headers?: HttpHeaders | {
    [header: string]: string | string[];
   };
   observe?: "body";
  params?: HttpParams | {
    [param: string]: string | string[];
  };
  reportProgress?: boolean;
  responseType: "arraybuffer";
  withCredentials?: boolean;
}): Observable<ArrayBuffer>

请帮忙!!!

注意:我的问题不是如何使用HttpHeaders,而是如何使用HttpHeaders,我的问题是如何直接使用HttpClient中的声明类型{[Header:string]:string string[];}中提到的对象

共有1个答案

丁善
2023-03-14

问题是GetLoggedInUserHeaderRequestParam和Headers直接对象的签名不同

例如

  export interface GetLoggedInUserHeaderRequestParam {
      uid: string;
      PSID?: string;
    }

只接受具有uid和可选psid的对象,其中header直接指向对象

   {
      [header: string]: string | string[];
   }
{
  "uid" : "1234",
  "PSID" : "1223",
  "name" : "test",
  ..... 
}

您可以通过将接口定义为

interface GetLoggedInUserHeaderRequestParam {
    [name: string] : string | string[];

}

并将HTTP方法调用为

let header: GetLoggedInUserHeaderRequestParam  = {
  "uid" : "1234",
  "PSID" : "1234"
}

getLoggedInUser(header);
 类似资料:
  • 9. 不完全类型和复杂声明 在第 1 节 “复合类型与结构体”讲过算术类型、标量类型的概念,现在又学习了几种类型,我们完整地总结一下C语言的类型。下图出自[Standard C]。 图 23.5. C语言类型总结 C语言的类型分为函数类型、对象类型和不完全类型三大类。对象类型又分为标量类型和非标量类型。指针类型属于标量类型,因此也可以做逻辑与、或、非运算的操作数和if、for、while的控制表达

  • 我有一个类用复数来计算,一个实部和一个虚部作为双类型。在其他部分,我有一个rational类来计算有理数。现在我想让我的复形类能在实部和虚部是有理数的情况下运算。我读过一些关于泛型的文档,但我不知道如何将实部和虚部声明为泛型类型,以及当实部和虚部是双倍或有理时如何使用添加2复数的方法。这是我的测试代码: 如果您看到了我实现了2个add方法的代码,但我只想要一个,因此对于其他方法,也需要toStri

  • 数据-我使用XML中的许多附加列获取此类数据,并使用com。databricks spark-xml\u 2.11库,用于将xml数据转换为数据帧。 要求-必须从数组(struct)类型或列custom\u属性转换数据。示例中的custom\u属性,如示例输出所示。My struct有三个字段,分别命名为“\u VALUE”、“属性\u id”、“值”。我需要将属性id转换为列名称,数据为-检查“

  • 我试图在我的主文件。 entry.ts位于src/js/entry, ts,vue的类型定义位于src/js/lib/baul/vue/type/index.d.ts 编译此文件时,输出如下。顺便说一句,typescript的目标是es6和es6模块。 JQuery工作正常(看起来像),所以我用导入替换了对vue类型定义的引用。 它编译得很好,下面是输出: 问题是没有删除类型定义的import语句

  • 我有一个对象,其中包含另一个对象类型的属性,我想将其视为复杂类型。 在添加迁移时,我遇到了需要主键的问题(这正是我想要防止的)。 实体类型坐标需要定义主键。 编辑 出于性能原因,我希望属性存储为和,而不是对另一个表的引用。

  • npm包允许我们在TypeScript应用程序中使用反应。我们将组件定义为 在这里,我们必须声明组件道具和状态的类型(在类型变量中)。 在我们声明了这些类型之后,TypeScript使用这些类型来验证组件的使用(传递给它的道具的形状)。 我想围绕这样一个组件创建一个容器。容器将重用组件的道具。但是为了用相同的道具创建另一个组件,我必须重新声明道具的类型。或者从原始零部件文件中导出它们并导入到容器中