NodeJS + TypeScript:使用脚本编译代码的语法不清晰

我正在尝试在我的节点项目中使用Typescript,但遇到了一些问题。

这是我的index.ts文件:

import express from 'express'; const app = express(); 

我在跑:

 tsc --module commonsjs -d index.ts 

我的输出是index.js:

 var express_1 = require('express'); var app = express_1["default"](); 

这个["default"]是从哪里来的? 这使我的代码不能正常运行:

 var app = express_1["default"](); ^ TypeError: express_1.default is not a function 

据我所知,我应该得到没有“默认”括号的代码,它会工作正常 – 我试图删除括号,它的工作。

我在这里错过了什么?

最安全的解决scheme是:

 import express = require('express'); 

这转换到:

 var express = require('express'); 

import的官方文件需要声明可以在这里find。

我相信打字稿期望一个名为“默认”的导出function作为上面的代码,从这里的最后一段来判断。


注意,看起来像打字稿的最新版本(typescript@1.8.0-dev.20151229在撰写本文时)会对尝试使用缺less默认值的编译尝试发出警告:

 index.ts(1,8): error TS1192: Module '"express"' has no default export. 

附注2,微软使用import * as express from 'express';import * as express from 'express';例子import * as express from 'express'; 语法可以在这里find。 当针对一个commonjs模块(就像在这个例子中那样)的时候,这个也会传递给var express = require('express');

如果您尝试使用Express之类的非ES6模块的默认导出,则需要使用旧式导入语法import express = require('express') 。 在ES6模块中,没有默认值导出,如Node.js模块的module.exports或AMD模块的return ; ES6模块的默认导出只是default密钥。 这就是为什么当您尝试使用ES6默认import ,TypeScript将生成可访问default属性的JavaScript。

有关这方面的更多信息,可以在新的es6语法中导入commonjs / amd模块,例如`import foo = require('foo')` 。