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')` 。