модуль.экспорт в 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 ответов:
вы можете экспортировать один класс в 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 и ограничение в текущей спецификации модуля 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