module.exports schrijfmachine

stemmen
48

Weet iemand hoe je een module.exports doen?

Ik probeerde een aantal verschillende manieren om te eindigen met

export class Greeter {}

die compileren

exports.Greeter = Greeter;

Maar wat ik echt wil is dit:

exports = Greeter;

Zodat ik het kan gebruiken als volgt:

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

en niet

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

Is dit mogelijk met Typescript?

De vraag is gesteld op 02/10/2012 om 19:40
bron van user
In andere talen...                            


6 antwoorden

stemmen
25

U kunt een enkele klasse te exporteren met de schrijfmachine als volgt uit:

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;

En hier is hoe het gaat om te worden gebruikt:

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

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

console.log(name); // Homer Simpson

Voor de volledigheid, hier is mijn tsconfig.json (ik gebruik de schrijfmachine v2.0.3):

{
  "compilerOptions": {
    "module": "commonjs",
    "moduleResolution": "node",
    "outDir": "dist/commonjs",
    "rootDir": "src/ts",
    "target": "es5"
  },
  "exclude": [
    "dist",
    "node_modules"
  ]
}
antwoordde op 01/11/2016 om 09:48
bron van user

stemmen
19

Dit is nu geïmplementeerd en is klaar met de schrijfmachine 0,9 :)

antwoordde op 28/06/2013 om 12:42
bron van user

stemmen
11

Momenteel niet. Dit is een beperking schrijfmachine en een beperking van de huidige stroman module specificatie bij ECMA overwogen die schrijfmachine na een patroon.

Dit zou een goede suggestie om op CodePlex zijn.

antwoordde op 02/10/2012 om 21:20
bron van user

stemmen
7

Dus ik denk dat ik een oplossing gevonden. wikkel gewoon het trefwoord 'module' tussen haakjes in uw Ts file:

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

De gegenereerde javascript bestand zal precies hetzelfde zijn:

(module).exports = MyClass;

Let op, het is beter dan te verklaren var module zelf, het downloaden van de node.d.ts definitie bestand en plak het in dezelfde map als het logbestand. Hier kunt u een voorbeeld van een uitdrukkelijke node.js routing bestand dat node.d.ts aanneemt is in dezelfde map:

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

Ik kan dan nieuw een SheetController en (met behulp van express) wijst u de weergave methode:

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

Ik neem aan dat een zoekwoord kan worden ontsnapt met behulp van dit patroon:

declare var reservedkeyword: any;
(reservedkeyword).anything = something;
antwoordde op 31/12/2012 om 07:09
bron van user

stemmen
2

Het is lelijk en hacky, maar je kunt nog steeds doen:

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

Welke compileert in:

var Greeter = (function () {
    function Greeter() { }
    return Greeter;
})();
exports = Greeter;
antwoordde op 05/10/2012 om 19:42
bron van user

stemmen
-1

probeer deze standaardtekst app template https://github.com/ntheile/TypeScript-Backbone-Require-Boilerplate

antwoordde op 09/10/2012 om 03:58
bron van user

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