module.exports na psacím stroji

hlasů
48

Má někdo vědět, jak to udělat module.exports?

Zkoušel jsem několik různých způsobů, jak skončí s

export class Greeter {}

který bude sestavovat, aby

exports.Greeter = Greeter;

Ale to, co opravdu chci, je toto:

exports = Greeter;

Takže jsem ji použít takto:

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

a nikoli

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

Je to možné s psacím stroji?

Položena 02/10/2012 v 19:40
zdroj uživatelem
V jiných jazycích...                            


6 odpovědí

hlasů
25

Můžete exportovat jednu třídu na stroji takto:

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;

A tady je, jak to bude možné použít:

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

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

console.log(name); // Homer Simpson

Pro úplnost, tady je moje tsconfig.json (já používám strojopisem v2.0.3):

{
  "compilerOptions": {
    "module": "commonjs",
    "moduleResolution": "node",
    "outDir": "dist/commonjs",
    "rootDir": "src/ts",
    "target": "es5"
  },
  "exclude": [
    "dist",
    "node_modules"
  ]
}
Odpovězeno 01/11/2016 v 09:48
zdroj uživatelem

hlasů
19

To bylo nyní implementována a je připraven na stroji 0,9 :)

Odpovězeno 28/06/2013 v 12:42
zdroj uživatelem

hlasů
11

V současné době ne. Jedná se o omezení na stroji a omezení v současné specifikaci slámově muž modulu uvažuje ECMA který psacím stroji je vzorovaný po.

To by bylo skvělý návrh, aby se na CodePlex.

Odpovězeno 02/10/2012 v 21:20
zdroj uživatelem

hlasů
7

Takže myslím, že jsem našel řešení. Jen zabalit klíčové slovo ‚modul‘ v závorkách v souboru Ts:

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

Vygenerovaný javascript souboru bude přesně stejné:

(module).exports = MyClass;

Všimněte si, že lepší než deklarovat VAR modul sami stáhnout soubor definice node.d.ts a držet jej do stejného adresáře jako soubor strojopis soubor. Zde je kompletní ukázka výslovné Node.js Soubor routing který předpokládá node.d.ts je ve stejném adresáři:

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

I pak může nového vytvoření SheetController a (pomocí expresní) přiřadit způsob zobrazení:

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

Myslím, že všechna klíčová slova, lze zrušit pomocí tohoto vzoru:

declare var reservedkeyword: any;
(reservedkeyword).anything = something;
Odpovězeno 31/12/2012 v 07:09
zdroj uživatelem

hlasů
2

Je to ošklivý a hacky, ale stále můžete udělat:

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

Který sestavuje na:

var Greeter = (function () {
    function Greeter() { }
    return Greeter;
})();
exports = Greeter;
Odpovězeno 05/10/2012 v 19:42
zdroj uživatelem

hlasů
-1

zkuste tuto app standardizovaný šablonu https://github.com/ntheile/TypeScript-Backbone-Require-Boilerplate

Odpovězeno 09/10/2012 v 03:58
zdroj uživatelem

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