支持Typescript
supabase-wechat-stable-v2
支持Typescript。
生成类型
你可以使用我们的CLI来生成类型。
supabase start supabase gen types typescript --local > lib/database.types.ts
这些类型是直接从你的数据库中生成的。给定一个表public.movies
,该定义将提供以下数据。
1interface Database {
2 public: {
3 Tables: {
4 movies: {
5 Row: {} // The data expected to be returned from a "select" statement.
6 Insert: {} // The data expected passed to an "insert" statement.
7 Update: {} // The data expected passed to an "update" statement.
8 }
9 }
10 }
11}
在 "选择"、"插入 "和 "更新 "之间是有区别的,因为通常你会在数据库中为特定的列设置默认值。 有了默认值,你就不需要通过网络发送任何数据,即使该列是一个 "必填 "字段。我们的类型系统是精细的 足以处理这些情况。
注入类型定义
你可以用你用supabase-wechat-stable-v2生成的类型来充实supabase客户端。
1import { createClient } from 'supabase-wechat-stable-v2' 2import { Database } from 'lib/database.types' 3 4const supabase = createClient<Database>(process.env.SUPABASE_URL, process.env.SUPABASE_ANON_KEY)
类型提示
supase-js
总是返回一个data
对象(代表成功),和一个error
响应(代表不成功的请求)。
这提供了一个简单的接口来获取从任何函数返回的相关类型。
1export async function getMovies() {
2 return await supabase.from('movies').select(`id, title`)
3}
4
5type MoviesResponse = Awaited<ReturnType<typeof getMovies>>
6export type MoviesResponseSuccess = MoviesResponse['data']
7export type MoviesResponseError = MoviesResponse['error']
嵌套表
对于像嵌套表这样的高级查询,你可能想构建自己的类型。
1import supabase from '~/lib/supabase'
2import type { Database } from '~/lib/database.types'
3
4async function getMovies() {
5 return await supabase.from('movies').select('id, title, actors(*)')
6}
7
8type Actors = Database['public']['Tables']['actors']['Row']
9type MoviesResponse = Awaited<ReturnType<typeof getMovies>>
10type MoviesResponseSuccess = MoviesResponse['data'] & {
11 actors: Actors[]
12}