打字稿中的module.exports

有人知道如何做一个module.exports?

我尝试了一些不同的方式结束

export class Greeter {} 

这将编译到

 exports.Greeter = Greeter; 

但我真正想要的是这样的:

 exports = Greeter; 

所以我可以像这样使用它:

 import Greeter = module("Greeter"); var greeter = new Greeter(); 

并不是

 import Greeter = module("Greeter"); var greeter = new Greeter.Greeter(); 

这可能与Typescript?

你可以像这样在TypeScript中导出一个类:

 class Person { private firstName: string; private lastName: string; constructor(firstName: string, lastName: string) { this.firstName = firstName; this.lastName = lastName; } public getFullName() { return `${this.firstName} ${this.lastName}`; } } export = Person; 

这是如何使用它:

 var Person = require('./dist/commonjs/Person.js'); var homer = new Person('Homer', 'Simpson'); var name = homer.getFullName(); console.log(name); // Homer Simpson 

要完成,这里是我的tsconfig.json (我正在使用TypeScript v2.0.3):

 { "compilerOptions": { "declaration": true, "module": "commonjs", "moduleResolution": "node", "noEmitOnError": true, "noImplicitAny": false, "outDir": "dist/commonjs", "removeComments": true, "rootDir": "src/ts", "sourceMap": false, "target": "es5" }, "exclude": [ "bower_components", "node_modules", "typings/browser", "typings/browser.d.ts" ] } 

这现在已经实现,并在TypeScript 0.9中准备好:)

目前没有。 这是TypeScript中的一个限制,并且在TypeScript被模式化之后的ECMA正在考虑的当前的straw-man模块规范中受到限制。

这将是CodePlex上的一个很好的build议。

所以我想我已经find了解决办法。 只需将关键字'模块'包装在您的.ts文件的括号中即可:

 declare var module: any; (module).exports = MyClass; 

生成的JavaScript文件将完全相同:

 (module).exports = MyClass; 

请注意,比自己声明var模块更好,请下载node.d.ts定义文件并将其与打字稿文件保存在同一个目录中。 这是一个完整的示例node.js路由文件,假设node.d.ts是在同一个目录中:

 /// <reference path="node.d.ts" /> var SheetController = function () { this.view = function (req, res) { res.render('view-sheet'); }; }; (module).exports = SheetController; 

然后,我可以新build一个SheetController和(使用快递)分配视图方法:

 var sheetController = new SheetController(); app.get('/sheet/view', sheetController.view); 

我想任何关键字都可以使用这种模式逃脱:

 declare var reservedkeyword: any; (reservedkeyword).anything = something; 

这是丑陋的,哈克,但你仍然可以这样做:

 class Greeter {} declare var exports:any; exports = Greeter; 

其中编译成:

 var Greeter = (function () { function Greeter() { } return Greeter; })(); exports = Greeter;