在 TypeScript 项目中实现 Supabase Database 查询的类型推断
在使用 Supabase 时,配合 TypeScript 可以获得完整的类型提示与校验能力,这对于提升开发体验和减少运行时错误非常重要。
1. 安装 Supabase CLI
brew install supabase/tap/supabase
2. 登录 Supabase
supabase login
3. 生成数据库类型
pnpx supabase gen types typescript --project-id your-project-id > types/supabase.ts
4. 在查询时如何避免类型丢失
如果直接使用默认的 SupabaseClient,类型信息会丢失,导致查询结果无法获得正确的类型提示。例如:
export const getCourseBySlug = async (
supabase: SupabaseClient,
courseSlug: string
) => {};
// 需要使用
export const getCourseBySlug = async (
supabase: SupabaseClient<Database>,
courseSlug: string
) => {};
为了避免在项目中反复书写泛型,可以封装一个全局类型别名:
// src/types/supabase-client.ts
import type { SupabaseClient } from "@supabase/supabase-js";
import type { Database } from "@/types/database";
export type TypedSupabaseClient = SupabaseClient<Database>;
之后在项目中统一使用:
export const getCourseBySlug = async (
supabase: TypedSupabaseClient,
courseSlug: string
) => {
// ...
};