Определения машинописного текста для sendgrid

Я пытаюсь написать приложение для машинописи, которое использует sendgrid, но в отличие от других определений, которые я получил от typings один из typings install sendgrid --ambient вызывает у меня некоторые головные боли:

Я могу создать экземпляр клиента следующим образом:

import * as sendgrid from 'sendgrid';
import Email = Sendgrid.Email;
import Instance = Sendgrid.Instance;
...
private client: Instance;
...
this.client = sendgrid(user, key);

А потом в коде я пытаюсь отправить электронное письмо, поэтому ts заставляет меня импортировать интерфейс EMail.

var email = new Email();
...
this.client.send(email, (err, data) => {
        if (err) {
            throw err;
        }
    });

tslint не выдает никаких ошибок, но когда я собираю и запускаю программу (или только мои тесты), я получаю это:

Мокко взорвалось! ReferenceError: Sendgrid не определен в Object. (/Users/chrismatic/codingprojects/weview/weview-node/build/server/components/mail/clients/sendgrid.js:4:13)

У кого-нибудь есть рабочая реализация для демонстрации, или я должен написать свой собственный интерфейс? Заранее спасибо за помощь

РЕДАКТИРОВАТЬ:

Сгенерированный файл js выглядит примерно так:

var sendgrid = require('sendgrid');
var Email = Sendgrid.Email;

Если я декапитализирую "Sendgrid", то ошибка исчезает, но я не могу сделать это в файле TS

1 ответ

Решение

Это должно дать вам представление о том, как использовать определения машинописного текста SendGrid.

import * as SendGrid from 'sendgrid';

export class SendGridMail extends SendGrid.mail.Mail {}
export class SendGridEmail extends SendGrid.mail.Email {}
export class SendGridContent extends SendGrid.mail.Content {}

export class SendGridService {
  private sendGrid;

  constructor(private sendgridApiKey: string) {
    this.sendGrid = SendGrid(sendgridApiKey);

  }

  send(mail: SendGridMail): Promise<any> {

    let request = this.sendGrid.emptyRequest({
      method: 'POST',
      path: '/v3/mail/send',
      body: mail.toJSON()
    });

    return this.sendGrid.API(request);
  }

}

Вот как я использовал класс выше:

let mail = new SendGridMail(
      new SendGridEmail('from@example.com'),
      'Sending with SendGrid is Fun',
      new SendGridEmail('to@example.com'),
      new SendGridContent('text/plain', 'Email sent to to@example.com'));


return this.sendgridService.send(mail);
Другие вопросы по тегам