Ответ 1
Теперь это реализовано и готово в TypeScript 0.9:)
кто-нибудь знает, как сделать 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();
Это возможно с Typescript?
Теперь это реализовано и готово в TypeScript 0.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"
]
}
В настоящее время нет. Это ограничение в TypeScript и ограничение в текущей спецификации модуля соломы рассматривается ECMA, с которым после TypeScript формируется рисунок.
Это будет отличное предложение сделать на CodePlex.
Итак, я думаю, что нашел обходной путь. Просто заверните ключевое слово 'module' в круглые скобки в файле .ts:
declare var module: any;
(module).exports = MyClass;
Сгенерированный файл javascript будет точно таким же:
(module).exports = MyClass;
Обратите внимание, что лучше, чем декларировать сам модуль var, загрузите файл node.d.ts и вставьте его в тот же каталог, что и ваш файл typescript. Ниже приведен полный пример экспресс файла 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;
Это уродливое и хакерское, но вы все равно можете:
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