Определения машинописного текста для 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);