【发布时间】:2016-09-04 14:09:42
【问题描述】:
我正在做一个非常简单的 nodejs 项目到 typescript 的转换。节点项目的前 2/main 文件已正确转译。除了文件顶部的 requires 语句外,第三个已转译以引入依赖项。
我确定找到了依赖项,因为 VSCode 可以自动完成和着色依赖项对象,并且没有编译器错误。这 3 个文件中的每一个都使用 ts import 语句而不是 requires。
由于它适用于 3 个文件中的 2 个,而且它们基本相同,我不知道从哪里开始。这听起来像一个编译问题吗?
//tsconfig.json
{
"compileOnSave": true,
"compilerOptions": {
"module": "commonjs",
"sourceMap": true,
"target": "es6",
"moduleResolution": "node",
"allowUnreachableCode" : true,
"listFiles":true,
"outDir":"js",
"watch": true
},
"files": [
"./typings/index.d.ts",
"./src/route.ts",
"./src/app.ts",
"./src/email.ts",
"./spec/email.spec.ts"
]
}
//email.ts
"use strict";
import * as sendgrid from "sendgrid";
export class mailer{
public Send(){
let sendGridAcctUser = "dina@dfberry.io";
let sendGridAcctKey: string = "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";
let toEmail = "admin@dfberry.io";
let fromEmail = "dinaberry@outlook.com";
let mysubject = "test email";
let mytext = "this is a test";
let options: Sendgrid.EmailOptions;
options.subject = mysubject;
options.text = mytext;
options.to = toEmail;
options.from = fromEmail;
options.replyto = fromEmail;
let myEmail: Sendgrid.Email;
myEmail = new Sendgrid.Email(options);
//let emailer : SendGrid;
let sg : Sendgrid.Constructor;
let sgInstance : Sendgrid.Instance;
sgInstance = new sg(sendGridAcctUser, sendGridAcctKey);
sgInstance.send(options, function( err, json){
console.log(err);
console.log(json);
} );
}
}
// compiled email.js -- expect requires after "use strict"
"use strict";
class mailer {
Send() {
let sendGridAcctUser = "dina@dfberry.io";
let sendGridAcctKey = "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";
let toEmail = "admin@dfberry.io";
let fromEmail = "dinaberry@outlook.com";
let mysubject = "test email";
let mytext = "this is a test";
let options;
options.subject = mysubject;
options.text = mytext;
options.to = toEmail;
options.from = fromEmail;
options.replyto = fromEmail;
let myEmail;
myEmail = new Sendgrid.Email(options);
//let emailer : SendGrid;
let sg;
let sgInstance;
sgInstance = new sg(sendGridAcctUser, sendGridAcctKey);
sgInstance.send(options, function (err, json) {
console.log(err);
console.log(json);
});
}
}
exports.mailer = mailer;
【问题讨论】:
-
在这第三个文件中,代码中是否使用了被移除的导入变量?
-
你能发布一些代码吗?至少文件 3 中的导入语法
-
我已将其缩小到编译器认为代码与 sendgrid 无关,因此它删除了该导入语句。我不确定为什么 VSCode 可以找到它的智能感知,但 tsc 不能。
-
感谢 Nitzan 和 Paarth,虽然您没有给我答案,但您给了我足够的线索,让我知道应该关注什么。 import 语句使用小写的 s,而内部代码使用大写的 S。这就是问题所在。一旦我将导入语句更改为使用大写的 S,然后代码匹配导入并将引用编译到 js 文件。
标签: node.js typescript compilation commonjs