【TypeScript】单例封装

本文介绍了一种在TypeScript中更加优雅地实现单例模式的方法。通过泛型函数`Singleton`来创建单例类,使得在实例化时无需传递自身对象。这种方式不仅简化了单例模式的使用,还保持了代码的整洁性和易读性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

解决ts 中单例 使用时需要传入本身对象的问题
更优雅的使用 单例

export function Singleton<T>() {
    class SingletonE {
        protected constructor() {
        }

        private static instance: SingletonE = null;

        public static get Instance(): T {
            if (SingletonE.instance == null) {
                SingletonE.instance = new this();
            }
            return SingletonE.instance  as T;
        }
    }

    return SingletonE;
}

///使用方式

class Test extends Singleton<Test>()
 {
    public TestGet() : string
     {         
		return "";
    }
}

Test.Instance.TestGet();
### 使用模式封装 Axios 的好处 当使用模式来封装 Axios 进行 API 请求时,可以带来多个显著的优势: #### 1. 统一配置管理 通过创建一个 Axios 实并将其作为对象提供给整个应用程序,可以在一处集中管理和修改请求的基础 URL、超时时间以及其他默认设置。这不仅减少了重复代码的数量,还提高了维护性和可读性。 ```javascript // 创建一个全局可用的 Axios const axiosInstance = axios.create({ baseURL: 'https://api.example.com', timeout: 5000, }); ``` #### 2. 中间件机制支持 利用 Axios 提供的拦截器功能,在发送请求前或接收响应后执行特定逻辑变得非常容易实现。比如添加身份验证头信息、处理错误情况或是日志记录等功能都可以在此处完成而无需每次调用接口都手动编写相同业务逻辑[^1]。 ```javascript axiosInstance.interceptors.request.use( config => { const token = localStorage.getItem('authToken'); if (token) { config.headers.Authorization = `Bearer ${token}`; } return config; }, error => Promise.reject(error) ); ``` #### 3. 更好的依赖注入与测试友好型设计 由于只存在唯一的一个 Axios 客户端实被广泛应用于项目内部各个模块之间通信交互过程中;因此可以通过模拟该客户端行为来进行元测试工作而不必担心其他地方会受到影响。同时这也使得不同部分之间的耦合度降低了许多。 ```typescript class ApiService { private static instance: ApiService; private constructor(private readonly client: typeof axios) {} public static getInstance(): ApiService { if (!ApiService.instance) { ApiService.instance = new ApiService(axiosInstance); } return ApiService.instance; } // ... other methods ... } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值