módulo.as exportações no typescript
-
12-12-2019 - |
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?
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;