Supabase API动态筛选:如何定义filterOperation的类型?
解决Supabase动态调用筛选方法的类型定义问题
要解决这个类型错误,你需要明确filterOperation的类型是Supabase查询构建器上所有筛选方法的名称集合,可以通过TypeScript的keyof操作符结合类型提取来实现:
手动指定筛选方法集合
直接基于PostgrestFilterBuilder类型,用Pick筛选出常用的方法名,定义专属类型:import { PostgrestFilterBuilder } from '@supabase/supabase-js'; // 定义所有合法的筛选方法名称类型 type FilterOperations = keyof Pick<PostgrestFilterBuilder<any, any, any[], unknown>, 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte' | 'like' | 'ilike' | 'in' | 'notIn' | 'is' | 'isNot'>; // 声明变量时指定类型 const filterOperation: FilterOperations = 'eq'; let response = supabase.from('accounts').select('*'); response = response[filterOperation]('username', 'john_doe');自动校验方法有效性
如果不想手动列举方法名,可通过类型守卫函数动态校验:function isValidFilterOp(op: string): op is keyof PostgrestFilterBuilder<any, any, any[], unknown> { const validOps = ['eq', 'neq', 'gt', 'gte', 'lt', 'lte', 'like', 'ilike', 'in', 'notIn', 'is', 'isNot']; return validOps.includes(op); } const op = 'like'; let response = supabase.from('accounts').select('*'); if (isValidFilterOp(op)) { response = response[op]('email', '%@gmail.com'); }
以上两种方式都能避免TypeScript的索引类型错误,同时保证动态调用的类型安全。
内容的提问来源于stack exchange,提问作者hoangtd
相关产品推荐
相关产品推荐

