module.exports в машинописи

голоса
48

знает ли кто, как сделать 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();

Возможно ли это с машинописью?

Задан 02/10/2012 в 19:40
источник пользователем
На других языках...                            


6 ответов

голоса
25

Вы можете экспортировать один класс в машинописном, как это:

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 (я использую машинопись v2.0.3):

{
  "compilerOptions": {
    "module": "commonjs",
    "moduleResolution": "node",
    "outDir": "dist/commonjs",
    "rootDir": "src/ts",
    "target": "es5"
  },
  "exclude": [
    "dist",
    "node_modules"
  ]
}
Ответил 01/11/2016 в 09:48
источник пользователем

голоса
19

Это в настоящее время внедрена и готова в машинописном 0.9 :)

Ответил 28/06/2013 в 12:42
источник пользователем

голоса
11

В настоящее время нет. Это ограничение в машинописи и ограничение в текущей спецификации соломенно-человек модуля времени рассматривается ECMA, который машинопись по образцу.

Это было бы большое предложение сделать на CodePlex.

Ответил 02/10/2012 в 21:20
источник пользователем

голоса
7

Так что я думаю, я нашел обходной путь. Просто оберните ключевое слово «модуль» в скобках в файле .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;

то я могу новую вверх SheetController и (с помощью экспресс) назначить метод просмотра:

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

Я полагаю, любое ключевое слово можно избежать, используя этот шаблон:

declare var reservedkeyword: any;
(reservedkeyword).anything = something;
Ответил 31/12/2012 в 07:09
источник пользователем

голоса
2

Это некрасиво и Hacky, но вы можете сделать:

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

Который компилируется в:

var Greeter = (function () {
    function Greeter() { }
    return Greeter;
})();
exports = Greeter;
Ответил 05/10/2012 в 19:42
источник пользователем

голоса
-1

попробуйте этот шаблон шаблонного приложения https://github.com/ntheile/TypeScript-Backbone-Require-Boilerplate

Ответил 09/10/2012 в 03:58
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more