如何在Drizzle ORM中获取模型类型?查询结果类型推导验证
问题解答
1. 变量post的类型
当执行const post = await db.query.posts.findFirst({ where: ...});时,post的类型由两部分决定:
- 你的数据库Schema中
posts表定义的实体类型(单条记录的结构类型) - 查询的确定性:如果
where条件能保证必然命中数据(比如匹配主键/唯一约束),类型是Posts实体类型;如果查询可能无结果,类型是Posts | null
2. 用ReturnType<typeof f>推导类型的可行性
这种方法是正确且常用的,具体实现示例如下:
// 包裹查询逻辑的函数 const fetchPost = async () => { return await db.query.posts.findFirst({ where: /* 你的业务查询条件 */ }); }; // 提取异步函数的实际返回类型 type Post = Awaited<ReturnType<typeof fetchPost>>; // 组件Props类型定义 type ComponentProps = { post: Post; };
注意点:
- 必须用
Awaited包裹ReturnType结果,因为异步函数的ReturnType返回的是Promise<xxx>,Awaited可以提取出内部的实际数据类型 fetchPost中的where条件要和组件实际接收的post对应的查询条件保持一致,才能保证推导的类型准确
内容的提问来源于stack exchange,提问作者Page not found
相关产品推荐
相关产品推荐

