module.exports στη γραφομηχανή

ψήφοι
48

έχει κάποιος ξέρει πώς να κάνει ένα module.exports;

Δοκίμασα μερικά διαφορετικούς τρόπους τελειώνει με

export class Greeter {}

η οποία θα συγκεντρώνουν για να

exports.Greeter = Greeter;

Αλλά αυτό που θέλω πραγματικά είναι το εξής:

exports = Greeter;

Έτσι ώστε να μπορώ να το χρησιμοποιήσει ως εξής:

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

και οχι

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

Είναι αυτό δυνατό με γραφομηχανή;

Δημοσιεύθηκε 02/10/2012 στις 19:40
πηγή χρήστη
Σε άλλες γλώσσες...                            


6 απαντήσεις

ψήφοι
25

Μπορείτε να εξάγετε μια ενιαία κατηγορία με γραφομηχανή όπως αυτό:

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;

Και εδώ είναι το πώς πρόκειται να χρησιμοποιηθεί:

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

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

console.log(name); // Homer Simpson

Για να είναι πλήρης, εδώ είναι μου tsconfig.json (Είμαι με τη χρήση γραφομηχανή v2.0.3):

{
  "compilerOptions": {
    "module": "commonjs",
    "moduleResolution": "node",
    "outDir": "dist/commonjs",
    "rootDir": "src/ts",
    "target": "es5"
  },
  "exclude": [
    "dist",
    "node_modules"
  ]
}
Απαντήθηκε 01/11/2016 στις 09:48
πηγή χρήστη

ψήφοι
19

Αυτό έχει πλέον υλοποιηθεί και είναι έτοιμο σε γραφομηχανή 0,9 :)

Απαντήθηκε 28/06/2013 στις 12:42
πηγή χρήστη

ψήφοι
11

Επί του παρόντος δεν υπάρχει. Αυτός είναι ένας περιορισμός στη γραφομηχανή και ένας περιορισμός στην τρέχουσα προδιαγραφή μονάδας άχυρο-άνθρωπος που εξετάζεται από ECMA που γραφομηχανή είναι διαμορφωμένος μετά.

Αυτό θα ήταν μια μεγάλη πρόταση για να κάνουν για CodePlex.

Απαντήθηκε 02/10/2012 στις 21:20
πηγή χρήστη

ψήφοι
7

Έτσι, νομίζω ότι έχω βρεθεί μια λύση. Απλά τυλίξτε τη λέξη-κλειδί «ενότητα» σε παρένθεση στο αρχείο .ts σας:

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

Το παραγόμενο αρχείο javascript θα είναι ακριβώς το ίδιο:

(module).exports = MyClass;

Σημειώστε, καλύτερα από ό, δηλώνοντας ενότητα var τον εαυτό σας, κατεβάστε το αρχείο node.d.ts ορισμό και κολλήστε το στον ίδιο κατάλογο με το αρχείο γραφομηχανή σας. Εδώ είναι ένα πλήρες δείγμα της ρητής node.js αρχείο δρομολόγησης που αναλαμβάνει node.d.ts είναι το ίδιο κατάλογο:

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

Στη συνέχεια μπορεί να δημιουργήσει ένα νέο SheetController και (χρησιμοποιώντας ρητή) εκχωρούν την μέθοδο άποψη:

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

Υποθέτω ότι κάθε λέξη-κλειδί μπορεί να δραπετεύσει χρησιμοποιώντας αυτό το πρότυπο:

declare var reservedkeyword: any;
(reservedkeyword).anything = something;
Απαντήθηκε 31/12/2012 στις 07:09
πηγή χρήστη

ψήφοι
2

Είναι άσχημο και Hacky, αλλά μπορείτε να κάνετε:

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

Ποια συγκεντρώνει σε:

var Greeter = (function () {
    function Greeter() { }
    return Greeter;
})();
exports = Greeter;
Απαντήθηκε 05/10/2012 στις 19:42
πηγή χρήστη

ψήφοι
-1

δοκιμάστε αυτό το πρότυπο στερεότυπο εφαρμογή https://github.com/ntheile/TypeScript-Backbone-Require-Boilerplate

Απαντήθηκε 09/10/2012 στις 03:58
πηγή χρήστη

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