打字稿中的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;