在TypeScript中,如何对PostgreSQL的查询结果进行强类型化?

前端开发 2026-07-09

我正在用TypeScript、Express和 PostgreSQL编写后端。我使用 pg npm包来连接PostgreSQL数据库并执行查询。

我想对从数据库得到的响应进行一些映射和转换。首先,我想对查询返回的响应进行类型标注,以避免TypeScript对那些我知道在响应中总会存在的属性的警告。

这是我的代码:

import { Pool } from 'pg';
const pool = new Pool({
 // Config
});

const result = await pool.query('SELECT * FROM my_table;')
if (result.rows.length > 0 && result.rows[0]) {
  console.log(result.rows[0].id);
}

我知道 result.rows 将是一个对象数组,每个对象都包含一个 id 属性。然而,在处理这个属性时会出现类似 Unsafe member access .id on an 'any' value. 的TypeScript警告。

result 的类型是 QueryResult<any>。我尝试创建一个新的对象数组类型并将其用于 result.rows[0],但却收到了关于不安全类型断言的TypeScript警告。

文档(https://node-postgres.com/features/queries)没有关于TypeScript类型的说明,我能找到的所有示例都用JavaScript编写。也没有关于 @types/pg 模块的文档。这似乎是一个常见的问题,似乎有一个明显的解决方案,但我找不到。

我还发现了一个关于MySQL的 类似问题,而不是PostgreSQL,但答案没有帮助,因为它是专门针对MySQL。

解决方案

查看 typesquery 需要一个表示结果行类型的类型参数 R。这意味着你应该能够直接这样做:

const result = await pool.query<YourInterface>('SELECT * FROM my_table;');

而参数中的类型将替换 anyQueryResult<any> 中的占位。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章