модуль.экспорт в typescript


кто-нибудь знает, как сделать модуль.экспорт?

Я пробовал несколько разных способов в конечном итоге с

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?

6 54

6 ответов:

вы можете экспортировать один класс в 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"
  ]
}

Это теперь реализовано и готово в TypeScript 0.9:)

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

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

так что я думаю, что нашел обходной путь. Просто оберните ключевое слово "модуль" в скобках в вашем .файл ТС:

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

сгенерированный файл javascript будет точно таким же:

(module).exports = MyClass;

обратите внимание, что лучше, чем объявлять модуль var самостоятельно, загрузите узел.д.ТС определение файлом и вставьте его в тот же каталог, что и ваш файл typescript. Вот полный пример экспресс-узла.файл маршрутизации js, который принимает узел.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;

это некрасиво и hacky, но вы все еще можете сделать:

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

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

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

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