Javascript 财产';授权';不存在于类型';请求';
考虑以下代码:Javascript 财产';授权';不存在于类型';请求';,javascript,typescript,express,Javascript,Typescript,Express,考虑以下代码: setContext(异步(请求,{headers})=>{ const token=await getToken(config.resources.gatewayApi.scopes) 常量completeHeader={ 标题:{ …标题, 授权: token&&token.accessToken?`Bearer${token.accessToken}`:'', }作为明确的要求, } console.log('accessToken:',completeHeader.hea
setContext(异步(请求,{headers})=>{
const token=await getToken(config.resources.gatewayApi.scopes)
常量completeHeader={
标题:{
…标题,
授权:
token&&token.accessToken?`Bearer${token.accessToken}`:'',
}作为明确的要求,
}
console.log('accessToken:',completeHeader.headers.authorization)
返回完整标题
})
这将生成以下TS错误:
类型“请求”上不存在属性“授权”
这来自尝试访问completeHeader.headers.authorization
。属性授权
在Express.request
界面上确实不可用。奇怪的是,TypeScript无法从literal对象推断类型,而literal对象的类型显然是string
。当不将类型定义为Express.Request
时,将抛出一个关于不安全的any赋值的错误
是否需要为这一字段创建新的TS接口?还是我们使用的类型不正确?“授权”字段类似于发送令牌的常用字段。原因是您正在将completeHeader.headers
强制为Express.Request
类型。强制类型将重写推断类型。
您可以通过执行以下操作来扩展强制类型:
as Express.Request & { authorization: string }
或者您可以创建一个全新的类型:
type AuthorizedRequest = Express.Request & { authorization: string };
...
as AuthorizedRequest
我还尝试将(token&&token.accessToken?
Bearer${token.accessToken}`:''作为字符串',但没有成功。你的建议很好,谢谢。