sendgrid的Typescript定义

Chr*_*s P 2 javascript definitions node.js sendgrid typescript

我正在尝试编写一个使用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);
Run Code Online (Sandbox Code Playgroud)

然后在代码中我试图发送一封电子邮件,这就是为什么ts迫使我首先导入电子邮件界面.

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

tslint不会抛出任何错误,但是当我构建并运行程序(或者只是我的测试)时,我得到了这个:

摩卡爆炸了!ReferenceError:未在Object中定义Sendgrid.(/Users/chrismatic/codingprojects/weview/weview-node/build/server/components/mail/clients/sendgrid.js:4:13)

有人在展示工作实现,还是我必须编写自己的界面?在此先感谢您的帮助

编辑:

生成的js文件看起来像这样:

var sendgrid = require('sendgrid');
var Email = Sendgrid.Email;
Run Code Online (Sandbox Code Playgroud)

如果我对"Sendgrid"进行资本化,那么错误就会消失,但我不能在ts文件中这样做

Edm*_*ake 8

这应该可以让您了解如何使用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);
  }

}
Run Code Online (Sandbox Code Playgroud)

以下是我如何使用上面的类:

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);
Run Code Online (Sandbox Code Playgroud)