module.exports a máquina de escribir

votos
48

¿Alguien sabe cómo hacer una module.exports?

Probé algunas maneras diferentes que terminan con

export class Greeter {}

el cual se compilará a

exports.Greeter = Greeter;

Pero lo que realmente quiero es la siguiente:

exports = Greeter;

De modo que pueda utilizar de esta manera:

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

y no

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

¿Es esto posible con Letra de imprenta?

Publicado el 02/10/2012 a las 19:40
fuente por usuario
En otros idiomas...                            


6 respuestas

votos
25

Puede exportar una sola clase a máquina de escribir así:

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 ser completo, aquí está mi tsconfig.json (estoy usando v2.0.3 Letra de imprenta):

{
  "compilerOptions": {
    "module": "commonjs",
    "moduleResolution": "node",
    "outDir": "dist/commonjs",
    "rootDir": "src/ts",
    "target": "es5"
  },
  "exclude": [
    "dist",
    "node_modules"
  ]
}
Respondida el 01/11/2016 a las 06:48
fuente por usuario

votos
19

Esto ya se ha implementado y está dispuesto a máquina de escribir 0,9 :)

Respondida el 28/06/2013 a las 12:42
fuente por usuario

votos
11

Actualmente no. Esta es una limitación a máquina y una limitación en la especificación actual módulo hombre de paja siendo considerado por ECMA que mecanografiado se modela después.

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

Respondida el 02/10/2012 a las 21:20
fuente por usuario

votos
7

Así que creo que he encontrado una solución. Simplemente 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;

Tenga en cuenta, mejor que la que se declara a sí mismo módulo var, descargue el archivo de definición node.d.ts y pegarlo en el mismo directorio que el archivo de transcripción. Este es un ejemplo completo de un expreso Node.JS archivo de enrutamiento que asume node.d.ts está en mismo directorio:

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

Puedo entonces una nueva y SheetController (usando expreso) asignar el método de vista:

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

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

declare var reservedkeyword: any;
(reservedkeyword).anything = something;
Respondida el 31/12/2012 a las 07:09
fuente por usuario

votos
2

Es feo y hacky, pero todavía se puede hacer:

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

Que compila en:

var Greeter = (function () {
    function Greeter() { }
    return Greeter;
})();
exports = Greeter;
Respondida el 05/10/2012 a las 19:42
fuente por usuario

votos
-1

probar esta plantilla de aplicación repetitivo https://github.com/ntheile/TypeScript-Backbone-Require-Boilerplate

Respondida el 09/10/2012 a las 03:58
fuente por usuario

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