метод sendConfirmMail это отправка почты при регистрации, просто пример реализации, она принимает юзера с интерфейсом IEmailUser который должен передаваться в главный интерфейс IMail и расширять его
export interface IEmailUser {
email: string
name: string
phone: number
}
async sendConfirmMail(user: IEmailUser) {
const mailContent:IMail<IEmailUser> = {
to: user.email,
subject: 'Confirm registration', //Example
template: 'confirmReg',
context: {
email: user.email,
name: user.name,
phone: user.phone
}
}
this.mailService.emailSend(mailContent)
}
после чего уже в сервисе должен в методе emailSend переменная mailData должна иметь интерфейс уже расширеный IMail
export interface IMail<T> {
to: string
subject: string,
template: string,
context: T
}
async emailSend(mailData:IMail<T>) {
const urlConfirmAddress = this.configService.get<string>(
'URL_CONFIRM_ADDRESS',
);
return this.mailerService.sendMail({
to: mailData.to,
subject: mailData.subject,
template: join(__dirname, '/../templates', mailData.template),
context: mailData.context
}).catch((e) => {
throw new HttpException(
`Ошибка работы почты: ${JSON.stringify(e)}`,
HttpStatus.UNPROCESSABLE_ENTITY,
);
});
}
как сделать в IMail context универсальным? потому что интерфейс T изменяемый, как это сделать?
у меня выходит ошибка
Не удается найти имя "T".ts(2304)
Параметр "mailData" общего метода из экспортированного класса имеет или использует закрытое имя "T".ts(4073)