typescript 支持的API的动态过滤器操作

sczxawaw  于 2023-10-22  发布在  TypeScript
关注(0)|答案(1)|浏览(105)

在这种情况下,如何定义filterOperation的类型?
let response = supabase.from('accounts').select(*)
用途:
response = response[filterOperation](field, value)
而不是:
response = response.eq(field, value)
我尝试了几种方法,但仍然得到了错误:无法用于索引类型“PostgreSQL FilterBuilder <any,any,any[],unknown>”

dzhpxtsq

dzhpxtsq1#

我以前用match filter做过这个。

const query = supabase.from('users').select('*').match(query ?? {});

查询变量应该看起来像这样... { name: 'John', age: 27 }
或者将其保留为null以获得所有结果。

编辑2023.10.12:

类似这样的东西应该可以工作:

const query = supabase.from('users').select('*');

filters.forEach(filter  => {
    switch (filter.operator) {
        case 'eq':
            query = query.eq(filter.field, filter.value)
            break;
        case 'neq':
            query = query.neq(filter.field, filter.value)
            break;
        case 'like':
            query = query.like(filter.field, filter.value)
            break;
        ...
    }
});

const {data, error} = await query();

filters对象看起来像这样:

[{
    operator: 'qe',
    field: 'name',
    value: 'john'
}, 
...]
  • 我已经做了类似的事情来动态添加or条件,它工作了。

相关问题