95

誰かが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で可能ですか?

4

4 に答える 4

87

次のように、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"
  ]
}
于 2016-11-01T09:48:34.267 に答える
10

だから私は回避策を見つけたと思います。キーワード 'module' を .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 を新しく作成し、(express を使用して) ビュー メソッドを割り当てます。

var sheetController = new SheetController();
app.get('/sheet/view', sheetController.view);

このパターンを使用して、任意のキーワードをエスケープできると思います。

declare var reservedkeyword: any;
(reservedkeyword).anything = something;
于 2012-12-31T06:09:20.797 に答える
2

醜くてハックですが、それでもできます:

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

コンパイルすると次のようになります。

var Greeter = (function () {
    function Greeter() { }
    return Greeter;
})();
exports = Greeter;
于 2012-10-05T18:42:12.860 に答える