首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Typescript -类型HeadersInit上不存在“授权”

Typescript -类型HeadersInit上不存在“授权”
EN

Stack Overflow用户
提问于 2021-05-01 20:52:44
回答 1查看 932关注 0票数 3

我正在使用Authorization模块,并有一个助手函数,用于向第三方服务发出授权请求(基本上只是一个中间件,用于在node-fetch头中添加)。

代码语言:javascript
复制
async function makeAuthorizedRequest(url: string, options: RequestInit) {
  if (!options) {
    options = { headers: {} as HeadersInit }
  }
  if (!options.headers) {
    options.headers = {} as HeadersInit
  }
  options.headers.Authorization = `Bearer ${access_token}`
  if (!options.headers['User-Agent']) {
    options.headers['User-Agent'] = USERAGENT
  }
  return fetch(url, options)
}

RequestInit类型定义为具有HeadersInit类型的headers属性,如下所示

代码语言:javascript
复制
export type HeadersInit = Headers | string[][] | { [key: string]: string };

我的集成开发环境(VSCode)中有两个明显的错误,tsc拒绝对其进行编译,因为

代码语言:javascript
复制
Property 'Authorization' does not exist on type 'Headers'.ts(2339)

代码语言:javascript
复制
Element implicitly has an 'any' type because expression of type '"User-Agent"' can't be used to index type 'HeadersInit'.
  Property 'User-Agent' does not exist on type 'HeadersInit'.ts(7053)

很明显,“用户代理”和“授权”是有效的http头,根据我的理解,类型{[key: string]: string}定义应该允许这样做,因为“用户代理”和“授权”是字符串,它们的值被设置为字符串。为什么tsc看不到这一点,我如何才能真正修复它?

(我过去在受影响的代码行上使用过//@ts-ignore,但我想了解它所关心的是什么,以及将来如何解决这个问题-因为在整个代码库中使用ts-ignore看起来并不专业)

EN

回答 1

Stack Overflow用户

发布于 2021-05-02 03:13:47

以下是解决方案:

代码语言:javascript
复制
const headersInit: HeadersInitt = {};
options.header = headersInit;

通常,您希望尽可能避免类型断言(as)。

另一种解决方案:如果您知道options.headers既不是Headers也不是string[][],您可以这样做:

代码语言:javascript
复制
options.headers = {} as { [key: string]: string }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67346496

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档