modulo.export in dattilografo.
-
12-12-2019 - |
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?
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;
.