@kiberchainik
начинающий найкрутейшЫй програмЁр

Как сделать тип универсальным?

метод 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)
  • Вопрос задан
  • 118 просмотров
Пригласить эксперта
Ответы на вопрос 1
async emailSend<T>(mailData: IMail<T>)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы