ts+axios+vue3封装请求头加token报错

2 篇文章 0 订阅

在使用ts封装axios时编译器报错:对象可能为“未定义”。ts(2532)

封装请求时要传递token变量为Authorization

      config.headers.Authorization = `Bearer ${token}`;

内置的并没有这个变量所以我们要告诉ts这个东西是一定存在的

      config.headers!.Authorization = `Bearer ${token}`;

就是在变量前加一个!

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
以下是一个基于AxiosVue3和TypeScript的Ajax请求封装示例: ``` import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios'; import { reactive } from 'vue'; interface ResponseData { code: number; message: string; data: any; } interface AxiosResult<T> { data: T | null; error: string | null; loading: boolean; } class AjaxService { private instance: AxiosInstance; constructor(baseURL: string) { this.instance = axios.create({ baseURL, timeout: 5000, }); this.instance.interceptors.request.use( (config: AxiosRequestConfig) => { config.headers.Authorization = sessionStorage.getItem('token') || ''; return config; }, (error: any) => { console.error(error); }, ); this.instance.interceptors.response.use( (res: AxiosResponse<ResponseData>) => { if (res.status === 200) { if (res.data.code === 0) { return res.data.data; } else { console.error(res.data.message); return null; } } else { console.error(res.status); return null; } }, (error: any) => { console.error(error); return null; }, ); } public async get<T>(url: string, config?: AxiosRequestConfig): Promise<AxiosResult<T>> { const result: AxiosResult<T> = reactive({ data: null, error: null, loading: true, }); try { const response = await this.instance.get(url, config); result.data = response; } catch (error) { result.error = error; } finally { result.loading = false; } return result; } public async post<T>(url: string, data?: any, config?: AxiosRequestConfig): Promise<AxiosResult<T>> { const result: AxiosResult<T> = reactive({ data: null, error: null, loading: true, }); try { const response = await this.instance.post(url, data, config); result.data = response; } catch (error) { result.error = error; } finally { result.loading = false; } return result; } } export default new AjaxService('https://example.com/api'); ``` 使用示例: ``` import ajax from './ajax-service'; const result = await ajax.get<User[]>('/users'); if (result.error) { console.error(result.error); } else if (result.data) { console.log(result.data); } else { console.log('No data returned.'); } ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值