La propiedad 'autorización' no existe en el tipo 'Solicitud'
Considere este código:
setContext(async (req, { headers }) => {
const token = await getToken(config.resources.gatewayApi.scopes)
const completeHeader = {
headers: {
...headers,
authorization:
token && token.accessToken ? `Bearer ${token.accessToken}` : '',
} as Express.Request,
}
console.log('accessToken: ', completeHeader.headers.authorization)
return completeHeader
})
Lo que genera el siguiente error TS:
La propiedad 'autorización' no existe en el tipo 'Solicitud'.
Esto viene de intentar acceder a completeHeader.headers.authorization
. De hecho, la propiedad authorization
no está disponible en la Express.request
interfaz. Es extraño que TypeScript no pueda inferir el tipo del objeto literal, que claramente es de tipo string
. Cuando no se define el tipo as Express.Request
, se arroja un error sobre una asignación insegura.
¿Es necesario crear una nueva interfaz TS solo para este campo? ¿O estamos usando un tipo incorrecto? El campo authorization
parece ser un campo de uso común para enviar tokens.
Respuestas
La razón es porque estás obligando completeHeader.headers
al Express.Request
tipo. El tipo forzado anula el tipo inferido.
Lo que puede hacer es expandir ese tipo forzado haciendo lo siguiente:
as Express.Request & { authorization: string }
o podría crear un tipo completamente nuevo:
type AuthorizedRequest = Express.Request & { authorization: string };
...
as AuthorizedRequest