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

TypeScript处理union类型string | string[]时如何查询对应数据库记录

核心优化方案

统一参数类型为数组,消除分支重复逻辑
你只需要在函数开头把入参统一格式化为数组,后续就不需要区分单个/多个场景,共用同一段处理逻辑即可,同时还能修复原有代码里的隐性bug:循环分支中错误地把整个toEmail数组传给了单邮箱查询方法getUserByEmail。

优化后代码如下:

public async sendEmail(
  toEmail: string | string[],
): Promise<void> {
  // 统一转为数组格式,无需再区分单/多场景
  const emails = Array.isArray(toEmail) ? toEmail : [toEmail];
  // 共用同一段处理逻辑
  for (const email of emails) {
    const user = await this.userRepository.getUserByEmail(email);
    await checkIfPaymentMade(user);
  }
}

该方案的优势:

  • 完全消除重复代码,逻辑仅需要维护一份
  • 入参兼容逻辑收拢在函数开头,后续迭代更易维护
  • 修复了原有代码循环分支的参数传错问题

进阶性能优化

如果你的userRepository支持批量邮箱查询,可以进一步减少数据库请求次数,避免循环查库的IO开销:

public async sendEmail(
  toEmail: string | string[],
): Promise<void> {
  const emails = Array.isArray(toEmail) ? toEmail : [toEmail];
  // 一次查询所有对应用户,减少IO次数
  const users = await this.userRepository.getUsersByEmails(emails);
  for (const user of users) {
    await checkIfPaymentMade(user);
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 12:06:03