支持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}