Estoy llamando a un método sendEmail que envía un correo electrónico a un solo usuario o a un grupo de usuarios (el tipo de correo electrónico es string | string[] )
¿Hay una forma más limpia/mejor de determinar si se trata de una matriz o de un solo usuario para que pueda buscarlo en la base de datos en consecuencia? El código parece bastante repetitivo ahora.
public async sendEmail( toEmail: string | string[], ): Promise<void> { if (!Array.isArray(toEmail)) { const user = await this.userRepository.getUserByEmail(toEmail); await checkIfPaymentMade(user); } else { for (const email of toEmail) { const user = await this.userRepository.getUserByEmail(toEmail); await checkIfPaymentMade(user); } } }Algunas otras opciones vienen a la mente
public async sendEmail( toEmail: string | string[] ): Promise<void> { if (!Array.isArray(toEmail)) { await doStuff(toEmail); } else { for (const email of toEmail) { await doStuff(email); } } } private async doStuff(toEmail: string): Promise<void> { const user = await this.userRepository.getUserByEmail(toEmail); await checkIfPaymentMade(user); } public async sendEmail( toEmail: string | string[], ): Promise<void> { if (Array.isArray(toEmail) { for (const email of toEmail) { await sendEmail(email) } } else { const user = await this.userRepository.getUserByEmail(email); await checkIfPaymentMade(user); } } public async sendEmail( toEmail: string | string[], ): Promise<void> { const emailArray = Array.isArray(toEmail) ? toEmail : [toEmail]; for (const email of emailArray) { const user = await this.userRepository.getUserByEmail(email); await checkIfPaymentMade(user); } }Si solo quieres mantenerlo SECO, aquí tienes una opción:
public async sendEmail (recipients: string | string[]): Promise<void> { for (const address of Array.isArray(recipients) ? recipients : [recipients]) { const user = await this.userRepository.getUserByEmail(address); await checkIfPaymentMade(user); } }