'Otorisasi' properti tidak ada pada jenis 'Permintaan'
Pertimbangkan kode ini:
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
})
Yang menghasilkan kesalahan TS berikut ini:
Properti 'otorisasi' tidak ada pada jenis 'Permintaan'.
Ini berasal dari mencoba mengakses completeHeader.headers.authorization
. Properti authorization
memang tidak tersedia di Express.request
antarmuka. Aneh bahwa TypeScript tidak dapat mengubah tipe dari objek literal, yang jelas merupakan tipe string
. Saat tidak menentukan jenis, as Express.Request
kesalahan muncul tentang tugas apa pun yang tidak aman.
Apakah diperlukan untuk membuat antarmuka TS baru hanya untuk bidang yang satu ini? Atau apakah kita menggunakan tipe yang salah? Bidang tersebut authorization
terlihat seperti bidang yang umum digunakan untuk mengirim token.
Jawaban
Alasannya adalah karena Anda memaksakan completeHeader.headers
diri pada Express.Request
tipe tersebut. Jenis yang dipaksakan menggantikan jenis yang disimpulkan.
Apa yang dapat Anda lakukan adalah memperluas tipe yang dipaksakan itu dengan melakukan hal berikut:
as Express.Request & { authorization: string }
atau Anda dapat membuat jenis yang benar-benar baru:
type AuthorizedRequest = Express.Request & { authorization: string };
...
as AuthorizedRequest