not namespace handbook example node.js typescript import commonjs

node.js - namespace - typescript module resolver



module.exports en mecanografiado (6)

¿Alguien sabe cómo hacer un módulo. Exportaciones?

Intenté algunas formas diferentes de terminar con

export class Greeter {}

que compilará a

exports.Greeter = Greeter;

Pero lo que realmente quiero es esto:

exports = Greeter;

Para que pueda usarlo así:

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

y no

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

¿Es esto posible con Typescript?


Actualmente no. Esta es una limitación en TypeScript y una limitación en la especificación del módulo actual de straw-man que está siendo considerada por ECMA, que TypeScript tiene como patrón.

Esta sería una gran sugerencia para hacer en CodePlex.


Entonces creo que encontré una solución alternativa. Simplemente ajuste 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;

Tenga en cuenta que, mejor que declarar el módulo var usted mismo, descargue el archivo de definición node.d.ts y péguelo en el mismo directorio que su archivo de mecanografía. Aquí hay una muestra completa de un archivo de enrutamiento express node.js que asume que 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;

Luego puedo actualizar un SheetController y (usando express) asignar el método de vista:

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

Supongo que cualquier palabra clave se puede escapar utilizando este patrón:

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


Es feo y hacky, pero aún puedes hacerlo:

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

Que se compila en:

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


Esto ahora se ha implementado y está listo en TypeScript 0.9 :)


Puede exportar una sola clase en TypeScript de esta manera:

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 así es como se usará:

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 TypeScript v2.0.3):

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