You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript使用pg-promise为何无法直接导入TransactionMode与isolationLevel?

在TypeScript中使用pg-promise时直接导入TransactionMode和isolationLevel出现undefined的问题

核心原因:pg-promise的设计模式

pg-promise采用工厂函数模式,你调用pgPromise()创建的是一个数据库连接实例,而TransactionMode和isolationLevel并不是库的顶级导出成员——它们是挂载在实例的txMode属性下的运行时对象。

虽然TypeScript的类型定义文件(.d.ts)里可能把这些成员列为可导入的类型,但那只是给编译阶段做类型检查用的,运行时这些顶级导出的变量并不存在,所以你直接导入会拿到undefined。

为什么从pgp.txMode获取可行?

当你调用pgPromise()创建实例后,实例内部会初始化txMode模块,把TransactionMode构造函数和isolationLevel枚举挂载到这个属性上,这才是它们真正的运行时存在位置。

能不能直接导入使用?

按照pg-promise的官方设计,你没办法直接从库的顶级导出中拿到可用的TransactionMode和isolationLevel运行时实例。类型定义里的导出只是为了让你在TypeScript中做类型注解时能引用到它们的类型,但运行时必须从实例的txMode属性获取。

如果觉得每次写pgp.txMode.xxx麻烦,可以提前解构赋值简化代码:

import pgPromise from "pg-promise";

const pgp = pgPromise();
const { TransactionMode, isolationLevel } = pgp.txMode;

// 后续正常使用
const mode = new TransactionMode({ tiLevel: isolationLevel.serializable });

内容的提问来源于stack exchange,提问作者sw1337

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 06:55:20