mysql - TypeScript 正确输入查询结果 MySQL

标签 mysql node.js typescript promise

我正在使用 mysql2/promise npm package用于连接和查询 MySQL 数据库。我在尝试为我的查询结果设置正确的类型时感到困惑,因为我事先不知道结果是什么类型。

我创建了一个具有异步query 方法的数据库类。

// Database.ts
import mysql, { Pool } from "mysql2/promise"; // import mysql2/promise

export class Database implements IDatabase {
  logger: ILogger;
  pool: Pool;

  constructor(logger: ILogger) {
      this.logger = logger;
      // pool connection is set up here
  }

  async query(sql: string, options?: unknown): Promise<unknown> { // type?
      const [rows] = await this.pool.query(sql, options);
      return rows;
  }
}

在我的服务器代码中,我希望能够做这样的事情:

// server.ts
import { Database } from "./core/Database";
const db = new Database(logger);

app.get("/", async (req, res) => {
  const sql = `
      select *
      from users;
  `;
  const users: IUser[] = await db.query(sql); // get people

  // do some logic x

  // send response
  res.json({
      result: x
  });
});

使用 unknown 不起作用,因为我无法将它分配给我的类型,使用 any 可以,但感觉不对。有没有一种干净的方法可以做到这一点?

最佳答案

将函数键入:

async query<T = unknown>(sql: string, options?: unknown): Promise<T[]> { 

然后这样使用这个函数:

const users = await db.query<IUser>(sql);

关于mysql - TypeScript 正确输入查询结果 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69652855/

相关文章:

mysql - 有时我无法在离线时使用 node.js 连接到 mysql 数据库,直到我在线,其他时候它就可以工作,为什么?

typescript - 如何从 angular2 上的 setInterval 访问构造函数属性

typescript - Eslint 'rxjs/operators' 应该在项目的依赖项中列出

javascript - 根据输入数据使用括号表示法

mysql - 尝试在 AWS EC2 Amazon Linux 上安装 mysql-server,但出现问题 : conflicting requests

php - 从表中删除 (*php 变量*) 中的 id 返回错误

mysql - 如何使用Rails手动连接MYSQL数据库?

php - 如何使用php保存图片?

node.js - 从 nodejs 压缩和下载

node.js - 我可以在不使用 process.chdir() 的情况下更改 require( )'d module' s cwd )