【发布时间】:2021-08-08 18:23:26
【问题描述】:
TypeScript 新手。我正在使用 Express、Postgresql 和 Knex 开发一个节点应用程序,我在某些方面有点困惑,什么时候应该和不应该应用类型定义。我正在查看其他项目以获得一些指导,但我对他们如何接近何时使用类型定义以及何时不使用感到有些困惑。
这是我看到的代码版本。为什么这个人定义一个返回类型 Promise
数据库/index.ts:
export default function startTransaction(): Promise<Knex.Transaction> {
return new Promise((resolve, reject) => {
return db
.transaction((trx) => {
return resolve(trx);
})
.catch(() => {
reject('unable to complete transaction');
});
}) as Promise<Knex.Transaction>
}
下面的操作是否正确?我将 TypeScript 与 Knex 一起使用只是为了帮助这些查询自动完成?
model/company.ts:
interface Company {
id: string;
name: string;
date_created: Date;
}
function getCompanies(trx: Knex.Transaction): Knex.QueryBuilder {
return trx.table<Company>('company').returning('*');
}
这可能是一个愚蠢的问题,但是对于下面这个控制器,你不需要定义'trx'类型或'companies'类型,因为它们已经在模型中定义了,对吧?
controller/company.ts:
const getCompanies: RequestHandler = async (req, res): Promise<void> => {
const trx = await startTransaction();
try {
const companies = await Test.getCompanies(trx);
await trx.commit();
res.status(200).send(companies);
} catch (error) {
await trx.rollback();
res.status(500).send(error);
}
};
一般来说,当我查询数据库时,我是否也需要定义数据库返回给我的类型?我知道当我收到客户请求时,我显然需要确保所有这些值的定义与我的数据库定义的完全一致。 谢谢!基本问题,但对我前进并完全理解我应该如何处理项目的这一部分确实很有帮助。
【问题讨论】:
-
好吧,如果你是新手,我建议不要遵循那些他们使用高级主题的例子,比如你现在可能不需要的数据库事务
标签: node.js typescript postgresql express knex.js