Вопрос

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

Возможно ли это с помощью Typescript?

Это было полезно?

Решение 2

Это теперь было реализовано и готово в 3,9 :)

Другие советы

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

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

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

Полученный файл JavaScript будет точно так же:

(module).exports = MyClass;
.

Примечание, лучше, чем объявление модуля VAR самостоятельно, скачайте Node.d.ts Определение файла Это в том же каталоге, что и ваш файл Tearscript.Вот полный образец файла маршрутизации Express Node.js, который предполагает, что Node.dts находится в том же каталоге:

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

Я могу затем новичок в листоконтроллере и (с использованием Express) назначить метод просмотра:

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;
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top