module.exports in Typoskript

stimmen
48

weiß jemand, wie ein module.exports zu tun?

Ich habe versucht, ein paar verschiedene Möglichkeiten, enden mit

export class Greeter {}

die kompiliert werden

exports.Greeter = Greeter;

Aber was ich wirklich will, ist dies:

exports = Greeter;

Damit ich es wie folgt verwendet werden:

import Greeter = module(Greeter);
var greeter = new Greeter();

und nicht

import Greeter = module(Greeter);
var greeter = new Greeter.Greeter();

Ist dies möglich mit Typoskript?

Veröffentlicht am 02/10/2012 um 19:40
quelle vom benutzer
In anderen Sprachen...                            


6 antworten

stimmen
25

Sie können eine einzelne Klasse in Typoskript wie folgt exportieren:

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;

Und hier ist, wie es verwendet werden wird:

var Person = require('./dist/commonjs/Person.js');

var homer = new Person('Homer', 'Simpson');
var name = homer.getFullName();

console.log(name); // Homer Simpson

Um vollständig zu sein, hier ist mein tsconfig.json (Ich verwende Typoskript v2.0.3):

{
  "compilerOptions": {
    "module": "commonjs",
    "moduleResolution": "node",
    "outDir": "dist/commonjs",
    "rootDir": "src/ts",
    "target": "es5"
  },
  "exclude": [
    "dist",
    "node_modules"
  ]
}
Beantwortet am 01/11/2016 um 09:48
quelle vom benutzer

stimmen
19

Dies wurde nun umgesetzt und ist bereit, in Typoskript 0,9 :)

Beantwortet am 28/06/2013 um 12:42
quelle vom benutzer

stimmen
11

Zurzeit nicht. Dies ist eine Einschränkung in Maschinenschrift und eine Begrenzung der Stromstrohmann Modulspezifikation von ECMA angesehen, das Maschinenschrift nach strukturiert wird.

Dies wäre ein großer Vorschlag auf CodePlex zu machen.

Beantwortet am 02/10/2012 um 21:20
quelle vom benutzer

stimmen
7

Deshalb denke ich, dass ich eine Abhilfe gefunden habe. Wickeln Sie einfach das Stichwort ‚Modul‘ in Klammern in Ihrer .ts-Datei:

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

Die erzeugte JavaScript-Datei wird genau das gleiche:

(module).exports = MyClass;

Beachten Sie , besser als var Modul selbst erklärt, laden Sie die node.d.ts Definitionsdatei und kleben Sie es in demselben Verzeichnis wie die Typoskript - Datei. Dies ist die komplette Probe eines ausdrücklichen node.js Routing - Datei , die node.d.ts davon ausgegangen , ist in demselben Verzeichnis:

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

I können neue dann eine SheetController und (unter Verwendung von Express) die Ansicht Verfahren zuzuweisen:

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

Ich nehme jedes Stichwort kann mit diesem Muster maskiert werden:

declare var reservedkeyword: any;
(reservedkeyword).anything = something;
Beantwortet am 31/12/2012 um 07:09
quelle vom benutzer

stimmen
2

Es ist hässlich und hacky, aber man kann immer noch tun:

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

Welche kompiliert in:

var Greeter = (function () {
    function Greeter() { }
    return Greeter;
})();
exports = Greeter;
Beantwortet am 05/10/2012 um 19:42
quelle vom benutzer

stimmen
-1

versuchen , diese vorformulierten App - Vorlage https://github.com/ntheile/TypeScript-Backbone-Require-Boilerplate

Beantwortet am 09/10/2012 um 03:58
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more