誰かが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"
]
}
だから私は回避策を見つけたと思う。 .tsファイルの括弧でキーワード「モジュール」をラップするだけです:
declare var module: any;
(module).exports = MyClass;
生成されたjavascriptファイルはまったく同じになります。
(module).exports = MyClass;
Varモジュールを自分で宣言するよりも、 node.d.ts定義ファイル をダウンロードして、TypeScriptファイルと同じディレクトリに貼り付けてください。以下は、node.d.tsが同じディレクトリにあることを前提としたエクスプレスnode.jsルーティングファイルの完全なサンプルです。
/// <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;