Pergunta

alguém sabe como fazer um módulo.as exportações?

Eu tentei de algumas maneiras diferentes de acabar com

export class Greeter {}

o que irá compilar para

exports.Greeter = Greeter;

Mas o que eu realmente quero é este:

exports = Greeter;

Para que eu possa usá-lo assim:

import { Greeter } from "greeter";

const greeter = new Greeter();

e não

import { Greeter } from "greeter";

const greeter = new Greeter.Greeter();

Isso é possível com o Typescript?

Foi útil?

Solução 2

Isto já foi implementado e está pronta em TypeScript 0.9 :)

Outras dicas

Você pode exportar uma classe única Máquina 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;

E aqui está como ele vai ser usado:

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

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

console.log(name); // Homer Simpson

Para ser completa, aqui é o meu tsconfig.json (Eu estou usando o TypeScript v2.0.3):

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

Então, eu acho que eu encontrei uma solução.Apenas envolva a palavra-chave 'módulo' entre parênteses no seu .ts arquivo:

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

O ficheiro javascript gerado será exatamente o mesmo:

(module).exports = MyClass;

Nota, melhor do que declarar var módulo de si mesmo, baixe o nó.d.ts arquivo de definição de e colocá-lo no mesmo diretório que o arquivo typescript.Aqui está um exemplo completo de um serviço node.js arquivo de roteamento que assume nó.d.o ts está no mesmo diretório:

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

Posso, então, novo até um SheetController e (usando a express) atribuir a ver método:

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

Eu suponho que qualquer palavra-chave pode ser digitada usando este padrão:

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

É feio e hacky, mas você ainda pode fazer:

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

Que compila para:

var Greeter = (function () {
    function Greeter() { }
    return Greeter;
})();
exports = Greeter;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top