Module.Exports en TypScript
-
12-12-2019 - |
Pregunta
¿Alguien sabe cómo hacer un módulo.Exportes?
Probé algunas formas diferentes que terminan con
export class Greeter {}
que se compilará a
exports.Greeter = Greeter;
Pero lo que realmente quiero es esto:
exports = Greeter;
para que pueda usarlo así:
import { Greeter } from "greeter";
const greeter = new Greeter();
y no
import { Greeter } from "greeter";
const greeter = new Greeter.Greeter();
¿Esto es posible con TyPScript?
Solución 2
Esto se ha implementado ahora y está listo en TIPSCRIPTROSS 0.9 :)
Otros consejos
Puede exportar una sola clase en TypeScript como esta:
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;
y aquí es cómo se va a utilizar:
var Person = require('./dist/commonjs/Person.js');
var homer = new Person('Homer', 'Simpson');
var name = homer.getFullName();
console.log(name); // Homer Simpson
Para estar completo, aquí está mi tsconfig.json (estoy usando TypScript v2.0.3):
{
"compilerOptions": {
"module": "commonjs",
"moduleResolution": "node",
"outDir": "dist/commonjs",
"rootDir": "src/ts",
"target": "es5"
},
"exclude": [
"dist",
"node_modules"
]
}
Así que creo que he encontrado una solución.Solo envuelva la palabra clave 'módulo' entre paréntesis en su archivo .ts:
declare var module: any;
(module).exports = MyClass;
El archivo JavaScript generado será exactamente el mismo:
(module).exports = MyClass;
Nota, mejor que declarar VAR Módulo usted mismo, descargue el node.d.ts File y Sticken el mismo directorio que su archivo typycript.Aquí hay una muestra completa de un archivo de enrutamiento EXPRESS NODE.JS que asume NOde.d.ts está en el mismo directorio:
/// <reference path="node.d.ts" />
var SheetController = function () {
this.view = function (req, res) {
res.render('view-sheet');
};
};
(module).exports = SheetController;
Entonces puedo volver a subir una hoja y (usar Express) Asignar el método de vista:
var sheetController = new SheetController();
app.get('/sheet/view', sheetController.view);
Supongo que se puede escapar alguna palabra clave usando este patrón:
declare var reservedkeyword: any;
(reservedkeyword).anything = something;
es feo y hacky, pero todavía puedes hacer:
class Greeter {}
declare var exports:any;
exports = Greeter;
que se compila en:
var Greeter = (function () {
function Greeter() { }
return Greeter;
})();
exports = Greeter;