95

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

我尝试了一些不同的方法

export class Greeter {}

这将编译为

exports.Greeter = Greeter;

但我真正想要的是:

exports = Greeter;

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

import { Greeter } from "greeter";

const greeter = new Greeter();

并不是

import { Greeter } from "greeter";

const greeter = new Greeter.Greeter();

打字稿可以做到这一点吗?

4

4 回答 4

87

您可以像这样在 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": {
    "module": "commonjs",
    "moduleResolution": "node",
    "outDir": "dist/commonjs",
    "rootDir": "src/ts",
    "target": "es5"
  },
  "exclude": [
    "dist",
    "node_modules"
  ]
}
于 2016-11-01T09:48:34.267 回答
22

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

于 2013-06-28T11:42:46.657 回答
10

所以我想我找到了解决方法。只需将关键字 'module' 包含在 .ts 文件中的括号中:

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

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

(module).exports = MyClass;

请注意,比自己声明 var 模块更好,下载node.d.ts 定义文件并将其粘贴在与您的 typescript 文件相同的目录中。这是一个 express 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;

然后我可以新建一个 SheetController 并(使用 express)分配视图方法:

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

我想任何关键字都可以使用这种模式进行转义:

declare var reservedkeyword: any;
(reservedkeyword).anything = something;
于 2012-12-31T06:09:20.797 回答
2

这是丑陋和hacky,但你仍然可以这样做:

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

编译成:

var Greeter = (function () {
    function Greeter() { }
    return Greeter;
})();
exports = Greeter;
于 2012-10-05T18:42:12.860 回答