टाइपप्रति में 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;

उत्पन्न जावास्क्रिप्ट फ़ाइल बिल्कुल वैसा ही हो जाएगा:

(module).exports = MyClass;

ध्यान दें, वर मॉड्यूल अपने आप को घोषित करने की तुलना में बेहतर, डाउनलोड 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