TypeScript项目中MSSQL连接池自定义类型限制模式的作用疑问
针对该TypeScript自定义连接池类型写法的常见设计考量
- 刻意收窄API暴露范围,降低误操作概率
多人协作项目中,pool.close()属于仅在应用生命周期收尾阶段才允许调用的敏感方法,普通业务逻辑随意调用会直接导致全局连接池失效、所有后续数据库请求报错。手动定义仅包含connect、on、request三个业务侧必要方法的类型,可通过TypeScript的类型校验直接拦截业务代码对close()等非预期方法的调用,从语法层面规避误用风险。 - 提前做最小接口抽象,预留多数据源兼容能力
该写法本质是定义了数据库连接池的最小可用接口,若后续项目有切换数据库驱动、甚至切换数据库类型的需求,仅需要针对新驱动实现符合该接口定义的适配层,所有上层业务代码不需要做任何修改,可大幅降低后续数据源切换的重构成本。 - 规避第三方依赖类型不稳定的问题
部分版本的node-mssql自带的TypeScript类型定义可能存在和项目TS版本不兼容、或者类型声明不符合项目实际使用需求的问题,手动声明依赖的最小方法集合,可以完全不受第三方包类型变更的影响,哪怕后续升级node-mssql版本,只要核心方法的调用逻辑没有变化,就不会出现类型报错。
适配当前场景的优化方案
如果你的项目属于CLI工具、CRON任务等需要主动销毁连接池的场景,可以直接在自定义类型中补充close方法的声明即可,不需要改动其他运行逻辑:
let pool: { connect: () => Promise<sql.ConnectionPool>; on: (arg0: string, arg1: (err: any) => void) => void; request: () => any; close: () => Promise<void>; };
如果确认项目没有多数据源切换的规划,也可以直接使用node-mssql官方的类型声明:let pool: sql.ConnectionPool,即可使用所有连接池内置方法。
内容的提问来源于stack exchange,提问作者user199710
相关产品推荐
相关产品推荐

