module.exports in dattiloscritto

voti
48

C'è qualcuno che sa come fare un module.exports?

Ho provato alcuni modi diversi per finire con

export class Greeter {}

che per la compilazione

exports.Greeter = Greeter;

Ma quello che voglio veramente è questo:

exports = Greeter;

In modo che posso usare in questo modo:

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

e non

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

Questo è possibile con tipografico?

È pubblicato 02/10/2012 alle 19:40
fonte dall'utente
In altre lingue...                            


6 risposte

voti
25

È possibile esportare una singola classe a macchina in questo modo:

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;

Ed ecco come sta andando da utilizzare:

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

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

console.log(name); // Homer Simpson

Per essere completa, ecco il mio tsconfig.json (sto usando dattiloscritto v2.0.3):

{
  "compilerOptions": {
    "module": "commonjs",
    "moduleResolution": "node",
    "outDir": "dist/commonjs",
    "rootDir": "src/ts",
    "target": "es5"
  },
  "exclude": [
    "dist",
    "node_modules"
  ]
}
Risposto il 01/11/2016 a 09:48
fonte dall'utente

voti
19

Questo ora è stato implementato ed è pronto a macchina 0,9 :)

Risposto il 28/06/2013 a 12:42
fonte dall'utente

voti
11

Al momento non ci. Questa è una limitazione a macchina e una limitazione nella specifica modulo paglia-uomo corrente all'esame ECMA quale tipografico è modellato.

Questo sarebbe un ottimo suggerimento per fare su CodePlex.

Risposto il 02/10/2012 a 21:20
fonte dall'utente

voti
7

Quindi penso che ho trovato una soluzione. Basta avvolgere la parola 'modulo' tra parentesi nel file .ts:

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

Il file javascript generato sarà esattamente lo stesso:

(module).exports = MyClass;

Nota, meglio che dichiarare modulo var te stesso, scaricare il file di definizione node.d.ts e incollarla nella stessa directory del file typescript. Ecco un esempio completo di un espresso Node.JS file di instradamento che assume node.d.ts è nella stessa directory:

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

Posso quindi nuove fino a SheetController e (usando espresso) assegnare il metodo di visualizzazione:

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

Suppongo che una qualsiasi parola chiave può essere sfuggito utilizzando questo schema:

declare var reservedkeyword: any;
(reservedkeyword).anything = something;
Risposto il 31/12/2012 a 07:09
fonte dall'utente

voti
2

E 'brutto e hacky, ma si può ancora fare:

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

Che compila in:

var Greeter = (function () {
    function Greeter() { }
    return Greeter;
})();
exports = Greeter;
Risposto il 05/10/2012 a 19:42
fonte dall'utente

voti
-1

provare questo modello di esempio applicazione https://github.com/ntheile/TypeScript-Backbone-Require-Boilerplate

Risposto il 09/10/2012 a 03:58
fonte dall'utente

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