You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何映射TypeScript搜索字段与数据库列实现动态查询?

解决API搜索字段与数据库列的自动匹配问题

核心思路是建立前端搜索字段与数据库列的类型安全映射表,彻底摆脱if-else/switch,后续新增字段只需要更新映射表和类型定义即可,完全符合扩展性要求。

步骤1:定义类型安全的映射关系

先把前端允许的搜索字段和对应的数据库列做一一映射,同时通过TypeScript的类型检查确保映射完全覆盖所有允许的字段,避免遗漏:

// Restrict user to search these fields only
type SearchFieldType = 'name' | 'memberNo' | 'email' | 'companyName';

// 建立前端字段 -> 数据库列的映射(类型安全)
const searchFieldToDbCol = {
  name: 'username',
  memberNo: 'member_no',
  email: 'email',
  companyName: 'company_name'
} as const;

// 自动校验映射是否覆盖所有SearchFieldType,遗漏字段会直接报错
type CheckFieldCoverage = Exclude<SearchFieldType, keyof typeof searchFieldToDbCol>;
const _ensureAllFieldsMapped: CheckFieldCoverage = undefined!;

步骤2:转换搜索字段为数据库列

不管是单个还是多个搜索字段,直接通过映射表获取对应的数据库列,无需任何条件判断:

// 转换单个搜索字段
function getSingleDbColumn(field: SearchFieldType): typeof searchFieldToDbCol[keyof typeof searchFieldToDbCol] {
  return searchFieldToDbCol[field];
}

// 转换多个搜索字段
function getMultipleDbColumns(fields: SearchFieldType[]): typeof searchFieldToDbCol[keyof typeof searchFieldToDbCol][] {
  return fields.map(field => searchFieldToDbCol[field]);
}

步骤3:构建数据库查询

以构建查询条件为例,直接用转换后的数据库列名生成查询逻辑,适配不同的数据库操作场景(比如ORM、原生SQL):

// 示例:处理多字段搜索参数,生成数据库查询条件
function buildSearchQuery(searchParams: Partial<Record<SearchFieldType, string>>) {
  return Object.entries(searchParams).reduce((query, [field, value]) => {
    const dbColumn = searchFieldToDbCol[field as SearchFieldType];
    // 根据实际需求调整查询规则(比如模糊匹配、精确匹配)
    query[dbColumn] = { contains: value };
    return query;
  }, {} as Record<string, { contains: string }>);
}

// 调用示例:假设管理员传入{ name: "张三", email: "zhangsan@example.com" }
const query = buildSearchQuery({ name: "张三", email: "zhangsan@example.com" });
// 输出:{ username: { contains: "张三" }, email: { contains: "zhangsan@example.com" } }

方案优势

  • 无冗余条件判断:全程无需if-else/switch,代码简洁易维护
  • 类型安全保障:新增字段时,只要忘记更新映射表,TypeScript会直接抛出错误,提前规避遗漏问题
  • 扩展性极强:后续新增搜索字段,只需要在SearchFieldType和searchFieldToDbCol中添加对应项即可,无需修改其他业务逻辑

内容的提问来源于stack exchange,提问作者EQ0920

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 13:23:19