如何从Drizzle查询中获取指定列的返回类型?
解决方法
方法1:从查询函数返回值自动推断(推荐)
利用TypeScript的ReturnType和Awaited工具类型,直接从你的查询函数提取精确返回类型,完全匹配你选中的列:
// 自动提取getSubscription函数的异步返回类型 type SubscriptionResult = Awaited<ReturnType<typeof getSubscription>> // 在Props中使用该类型 interface PricesProps { subscription?: SubscriptionResult }
这个方式的优势是自动同步——以后修改查询的columns配置,类型会自动更新,不用手动维护字段列表。
方法2:手动从全表类型筛选字段
如果你需要明确指定字段,可以用Pick工具类型从全表类型中挑选需要的列:
// 从全表类型中筛选出plan和subscription_id字段 type SelectedSubscription = Pick<typeof subscriptions.$inferSelect, 'plan' | 'subscription_id'> // 在Props中使用该类型 interface PricesProps { subscription?: SelectedSubscription }
为什么之前的方式不生效
你之前用的subscriptions.$inferSelect是Drizzle生成的全表默认查询类型,它固定包含表的所有字段,和你实际查询时指定的columns配置无关,所以才会返回完整类型而非选中列的类型。
内容的提问来源于stack exchange,提问作者user30123003
相关产品推荐
相关产品推荐

