如何在TypeScript中检测mysql模块的版本并完成版本判断
TypeScript 检测 mysql 模块版本的实现方案
原代码问题
你写的代码无法正常运行,因为 mysql 模块的默认导出对象没有暴露 version 字段,运行时读取 mysql.version 会得到 undefined,判断条件永远不会触发。
可落地的实现方法
方案1:读取模块自带的 package.json(最准确,推荐使用)
直接读取 mysql 模块内置的 package.json 文件获取版本号,无需额外依赖:
// TS 4.5 及以上版本支持导入断言的写法 import mysqlPkg from 'mysql/package.json' assert { type: 'json' }; if (mysqlPkg.version === '2.18.1') { // 版本匹配后的业务逻辑 }
如果 TS 编译时报错,需要在 tsconfig.json 的 compilerOptions 中新增两个配置:
{ "resolveJsonModule": true, "allowSyntheticDefaultImports": true }
如果你用的 TS 版本低于4.5,不支持导入断言,可以改用 require 写法:
const mysqlPkg = require('mysql/package.json'); if (mysqlPkg.version === '2.18.1') { // 版本匹配后的业务逻辑 }
方案2:特性检测(仅特殊场景备选)
如果不方便读取 package.json,也可以通过判断 2.18.1 版本独有的 API、参数特性来间接识别版本,准确性低于直接读取版本号,非必要不推荐使用。
内容的提问来源于stack exchange,提问作者Gerd
相关产品推荐
相关产品推荐

