我和Chris P with his question有同样的问题,我更了解为什么是my issue here happened。
我通过npm安装了sendgrid,然后进行了输入,我的node_modules有一个sendgrid dir,我的类型有一个全局/sendgrid dir。
当我使用sendgrid (通过'npm安装sendgrid‘-直接的js,而不是ts)时,我的工作代码如下所示:
var helper = require('sendgrid').mail;
var from_email = new helper.Email('dina@dfberry.io');
var to_email = new helper.Email('berry.dina@gmail.com');
var subject = 'Hello World from the SendGrid Node.js Library!';
var content = new helper.Content('text/plain', 'Hello, Email!');
var mail = new helper.Mail(from_email, subject, to_email, content);
var sg = require('sendgrid')("SG.TJKAFkv..THIS..IS..THE...KEY");
var request = sg.emptyRequest({
method: 'POST',
path: '/v3/mail/send',
body: mail.toJSON(),
});
sg.API(request, function(error, response) {
console.log(response.statusCode);
console.log(response.body);
console.log(response.headers);
});当我查看sendgrid/index.d.ts (通过‘类型安装dt~sendgrid --全局-保存’)时,我看到两个模块,Sendgrid & 'sendgrid‘。为什么有两个模块?
//sendgrid/index.d.ts
// Generated by typings
// Source: https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/ac94ea73311e9d5607f919b5c174d66d72c78a29/sendgrid/sendgrid-1.1.0.d.ts
declare module Sendgrid {
//#region Options
export interface UriParts {
protocol: string;
host: string;
port: string;
endpoint: string;
}
export interface Options {
protocol?: string;
host?: string;
port?: string;
endpoint?: string;
uri?: string;
proxy?: string;
web?: {
pool?: any;
}
}
export interface OptionsExport {
uriParts: UriParts;
uri: string;
proxy?: string;
web?: {
pool?: any;
}
}
//#endregion
//#region Email
export interface EmailOptions {
to?: any;
toname?: string;
from?: string;
fromname?: string;
subject?: string;
text?: string;
html?: string;
bcc?: any;
replyto?: string;
date?: Date;
headers?: { [key: string]: string };
files?: FileHandlerOptions[];
smtpapi?: any;
}
export class Email {
to: any;
toname: string;
from: string;
fromname: string;
subject: string;
text: string;
html: string;
bcc: any;
replyto: string;
date: Date;
headers: { [key: string]: string };
files: FileHandler[];
smtpapi: any;
constructor();
constructor(options: EmailOptions);
addTo(address: string): void;
addHeader(type: string, value: string): void;
addSubstitution(type: string, value: string): void;
addSubstitution(type: string, value: string[]): void;
addSection(section: { [key: string]: string }): void;
addUniqueArg(uarg: { [key: string]: string }): void;
addCategory(category: string): void;
addFilter(filter: string, command: string, value: number): void;
addFilter(filter: string, command: string, value: string): void;
addFile(file: FileHandlerOptions): void;
setFrom(address: string): void;
setSubject(subject: string): void;
setText(text: string): void;
setHtml(html: string): void;
setHeaders(headers: { [key: string]: string }): void;
setSubstitutions(substitutions: { [key: string]: string[] }): void;
setSections(sections: { [key: string]: string }): void;
setUniqueArgs(uargs: { [key: string]: string }): void;
setCategories(categories: string[]): void;
setFilters(filters: any): void;
}
//#endregion
//#region FileHandler
export interface FileHandlerOptions {
filename?: string;
contentType?: string;
cid?: string;
path?: string;
url?: string;
content?: any;
}
export class FileHandler {
filename: string;
contentType: string;
cid: string;
type: string;
content: string;
path: string;
url: string;
constructor(options: FileHandlerOptions);
loadContent(callback: HandlerCallback): void;
static handlers: {
content: Handler;
path: Handler;
url: Handler;
none: Handler;
};
}
export interface Handler {
(file: FileHandler, callback: HandlerCallback): void;
}
export interface HandlerCallback {
(hasError: boolean, error: Error): void;
(hasError: boolean, error: string): void;
}
//#endregion
//#region Sendgrid Class
interface Constructor {
(api_user: string, api_key: string, options?: Options): Instance;
new (api_user: string, api_key: string, options?: Options): Instance;
}
export interface Instance {
version: string;
api_user: string;
api_key: string;
options: OptionsExport;
Email: typeof Email;
send(email: EmailOptions, callback: (err: Error, json: any) => any): void;
send(email: Email, callback: (err: Error, json: any) => any): void;
}
//#endregion
}
declare module "sendgrid" {
var ctor: Sendgrid.Constructor;
export = ctor;
}我想要使用的导出的东西是类Sendgrid.Email和"sendgrid".ctor。
当我意识到我可以让ts使用我的js并完成它时,我想了解如何使用sendgrid/index.d.ts,或者是否应该使用它。该文件表示它是从类型生成的,因此我假设类型运行在node_modules sendgrid文件中,并决定如何将其构建为d.ts文件。
然而,当我使用ts引入sendgrid时,它并不是我认为它应该工作的方式。
我认为我需要创建构造函数(api_user,api_key,options)并获取返回的实例。然后使用Instance.send()发送电子邮件。
当我使用VSCode时,intellisense显示sendgrid/index.d.ts对象,但是当我调用编译到js文件时,对象是空的。
如何读取/使用sendgrid/index.d.ts文件来针对sendgrid进行写入,并使intellisense (现在起作用)和已编译的js文件工作(现在不起作用)。
正如您可以从Chris's SO中读取的那样,ts代码会编译,但是使用d.ts文件的第一个对象是未定义的。
d.ts文件是错的吗?我怎么知道这是未来的事?除了intellisense之外,d.ts文件没有有意义地连接到基础sendgrid库。
发布于 2016-09-05 22:25:17
我看到两个模块,Sendgrid & 'sendgrid‘。为什么有两个模块
Sendgrid在全局命名空间中定义Sendgrid。这允许其他开发人员轻松地添加/修复定义导出的特性。
'sendgrid'模块指向可以import/require的NPM模块。这为您在执行import Sendgrid = require('sendgrid')时提供了安全性。这是推荐的用法(这里是模块的大粉丝)。
https://stackoverflow.com/questions/39337122
复制相似问题