module.exports w maszynopisie

głosy
48

Czy ktoś wie jak zrobić module.exports?

Próbowałem kilka różnych sposobów, kończąc

export class Greeter {}

który zostanie skompilowany do

exports.Greeter = Greeter;

Ale to, co naprawdę chcę to:

exports = Greeter;

Tak, że można go używać tak:

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

i nie

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

Jest to możliwe dzięki maszynie?

Utwórz 02/10/2012 o 19:40
źródło użytkownik
W innych językach...                            


6 odpowiedzi

głosy
25

Można eksportować jedną klasę w maszynopisie tak:

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 oto jak to będzie stosować:

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

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

console.log(name); // Homer Simpson

Aby być kompletne, tu jest mój tsconfig.json (używam maszynopis v2.0.3):

{
  "compilerOptions": {
    "module": "commonjs",
    "moduleResolution": "node",
    "outDir": "dist/commonjs",
    "rootDir": "src/ts",
    "target": "es5"
  },
  "exclude": [
    "dist",
    "node_modules"
  ]
}
Odpowiedział 01/11/2016 o 09:48
źródło użytkownik

głosy
19

Ten został wdrożony i jest gotowy w maszynopisie 0,9 :)

Odpowiedział 28/06/2013 o 12:42
źródło użytkownik

głosy
11

Obecnie nie. Jest to ograniczenie na maszynie i ograniczenie w obecnym opisie modułu słomy człowiek rozważa ECMA które Typescript jest na wzór.

Byłaby to wielka propozycja, aby na CodePlex.

Odpowiedział 02/10/2012 o 21:20
źródło użytkownik

głosy
7

Więc myślę, że znalazłem obejście. Wystarczy owinąć słowa kluczowego „moduł” w nawiasach w pliku .TS:

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

Wygenerowany plik javascript będzie dokładnie taka sama:

(module).exports = MyClass;

Uwaga, lepiej niż oświadczając modułu var siebie, należy pobrać plik definicji node.d.ts i trzymać go w tym samym katalogu, co plik maszynopisu. Powyżej znajduje się pełna próbka wyraźnej node.js plik routingu, która zakłada node.d.ts jest w tym samym katalogu:

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

można następnie NEW górę SheetController i (stosując Express) przypisać sposób widzenia:

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

Przypuszczam, że każdy kluczowe można uciec używając tego wzoru:

declare var reservedkeyword: any;
(reservedkeyword).anything = something;
Odpowiedział 31/12/2012 o 07:09
źródło użytkownik

głosy
2

Jest brzydki i hacky, ale wciąż można zrobić:

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

Który kompiluje się na:

var Greeter = (function () {
    function Greeter() { }
    return Greeter;
})();
exports = Greeter;
Odpowiedział 05/10/2012 o 19:42
źródło użytkownik

głosy
-1

spróbuj tego boilerplate app szablon https://github.com/ntheile/TypeScript-Backbone-Require-Boilerplate

Odpowiedział 09/10/2012 o 03:58
źródło użytkownik

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