[英]How to look for an item in DB when the type is String | String[] using typescript union types
我正在調用一個方法sendEmail
將 email 發送給單個用戶或一組用戶(到 email 的類型是string | string[]
)
是否有更清潔/更好的方法來確定它是數組還是單個用戶,以便我可以相應地在數據庫中查找它? 代碼現在看起來很重復。
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);
}
}
}
想到了一些其他的選擇
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);
}
}
如果您只想保持干燥,這里有一個選項:
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);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.