如何在typed-rest-client中向IRequestOptions.additionalHeaders追加内容?
错误原因分析
typed-rest-client中IRequestOptions.additionalHeaders对应的IHeaders类型本质是键为字符串、值为字符串的普通对象,类型定义为interface IHeaders { [key: string]: string },并不是浏览器原生Headers类的实例,本身不存在append、push等方法。- 你之前调用
append方法属于误用,运行时会因方法不存在、错误的隐式类型转换触发你遇到的TypeError报错。
正确实现方式
可变修改(直接修改原对象)
先兜底处理additionalHeaders可能为undefined的情况,直接给对象新增属性即可:
// 兜底确保additionalHeaders是对象 this.#options.additionalHeaders = this.#options.additionalHeaders ?? {}; // 直接追加Cookie头,原有其他头不会受影响 this.#options.additionalHeaders['Cookie'] = `X-DM-DST=${this.#token}`;
不可变修改(生成新对象,不改动原初始配置)
如果需要保留原初始头对象不变,用对象扩展运算符生成新的头对象赋值即可:
this.#options.additionalHeaders = { // 保留原有所有头 ...this.#options.additionalHeaders, // 新增/覆盖Cookie头 Cookie: `X-DM-DST=${this.#token}` };
补充说明
如果原有additionalHeaders中已经存在Cookie字段,直接赋值会覆盖原有Cookie,需要拼接的话可以用如下写法:
this.#options.additionalHeaders = this.#options.additionalHeaders ?? {}; const originCookie = this.#options.additionalHeaders.Cookie ?? ''; this.#options.additionalHeaders.Cookie = originCookie ? `${originCookie}; X-DM-DST=${this.#token}` : `X-DM-DST=${this.#token}`;
内容的提问来源于stack exchange,提问作者jsparkes
相关产品推荐
相关产品推荐

