Domanda

Qualcuno sa come fare un modulo.Export?

Ho provato alcuni modi diversi che finiscono con

export class Greeter {}
.

che compilerà a

exports.Greeter = Greeter;
.

Ma quello che voglio veramente è questo:

exports = Greeter;
.

In modo che io possa usarlo come questo:

import { Greeter } from "greeter";

const greeter = new Greeter();
.

e non

import { Greeter } from "greeter";

const greeter = new Greeter.Greeter();
.

è possibile con dattiloscritto?

È stato utile?

Soluzione 2

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

Altri suggerimenti

È possibile esportare una singola classe in dattiloscritto come questa:

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 sarà usato:

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

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

console.log(name); // Homer Simpson
.

Per essere completato, ecco il mio TSConfig.json (sto usando da solo V2.0.3):

{
  "compilerOptions": {
    "module": "commonjs",
    "moduleResolution": "node",
    "outDir": "dist/commonjs",
    "rootDir": "src/ts",
    "target": "es5"
  },
  "exclude": [
    "dist",
    "node_modules"
  ]
}
.

Quindi penso di aver trovato una soluzione alternativa.Basta avvolgere la parola chiave "modulo" tra parentesi nel tuo file .ts:

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

Il file JavaScript generato sarà esattamente lo stesso:

(module).exports = MyClass;
.

Nota, Meglio di dichiarare il modulo VAR stessi, scarica il node.d.ts definizione file e stickNella stessa directory del tuo file dattilografo.Ecco un campione completo di un file di routing di un nodo Express.js che presuppone che node.d.ts sia 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 nuovo su un foglio di foglio e (usando Express) Assegnare il metodo di visualizzazione:

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

Suppongo che qualsiasi parola chiave possa essere scappata utilizzando questo modello:

declare var reservedkeyword: any;
(reservedkeyword).anything = something;
.

È brutto e hacky, ma puoi ancora fare:

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

che compila in:

var Greeter = (function () {
    function Greeter() { }
    return Greeter;
})();
exports = Greeter;
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top