2013-01-23 52 views
8

ठीक है, जैसा कि मैं देख सकता हूं कि आप अपनी परियोजना में आंतरिक मॉड्यूल का उपयोग करना चाहते हैं। खैर, टाइपस्क्रिप्ट 0.8.1.1 में एक वर्कअराउंड था, आप गैर निर्यातित मॉड्यूल (आंतरिक) को परिभाषित कर सकते हैं और इसके ऊपर आयात जोड़ सकते हैं। 0.8.2 में ऐसा लगता है कि यह अब और काम नहीं करता है। केवल एक विकल्प जो मैं यहां देखता हूं, पूरी तरह से आयात वाक्यविन्यास को छोड़ना और नोड मॉड्यूल के लिए मानक आवश्यकता का उपयोग करना होगा। मुझे नहीं पता कि यह एक अच्छा विचार है, लेकिन कृपया, अपनी राय साझा करें। मुझे पता है कि आयात वाक्यविन्यास का उपयोग मॉड्यूल बाहरी (भाषा विनिर्देश) करेगा, लेकिन यह 0.8.1.1 में सच नहीं था, बग शायद?टाइपस्क्रिप्ट 0.8.2 आंतरिक मॉड्यूल में नोड.जेएस मॉड्यूल आयात करना

टाइपप्रति 0.8.1.1 में यह काम किया है और अब और 0.8.2 में काम नहीं करता:

import path = module('path'); 
import fs = module('fs'); 
module SomeNamespace.Controller { 
    export class Index { 
     ... 
    } 
} 

मैं फ़ाइल को संदर्भित कर सकता है अन्य आंतरिक मॉड्यूल में फ़ाइल के शीर्ष पर संदर्भ सिंटैक्स का उपयोग कोड ऊपर सहित और सामान्य रूप से फोन :

var ctrl = new SomeNamespace.Controller.Index; 
ctrl.index(); 

ऐसा लगता है कि 0.8.2 में यह एक ही तरीका है कि यह आंतरिक मॉड्यूल के लिए काम करता है:

var path = require('path'); 
var fs = require('fs'); 
module SomeNamespace.Controller { 
    export class Index { 
     ... 
    } 
} 

क्या Node.js मॉड्यूल के साथ आंतरिक मॉड्यूल मिश्रण करने के लिए कोई अन्य संभावनाएं हैं? उपर्युक्त उपयोग के साथ कुछ गड़बड़ है (यह संकलित करता है और ठीक चलाता है ...)?

उत्तर

4

मुझे लगता है कि टाइपप्रति 0.8.2 हमें विनिर्देश के करीब ले जाता है।

वाक्य रचना:

import x = module('SomeModule'); 

विशेष रूप से टाइपप्रति भाषा विशिष्टता में एक ExternalModuleReference है।

एक आंतरिक मॉड्यूल का उपयोग कर आयातित किया जाएगा:

///<reference path="SomeModule.ts" /> 
import x = SomeModule; 

लेकिन एक आंतरिक मॉड्यूल आयात करने से आप अपने जावास्क्रिप्ट में एक require बयान उत्पन्न नहीं करेगा।

टाइपस्क्रिप्ट भाषा विशिष्टता 0.8 - 9.2 से लिया गया।2 आयात घोषणा

ImportDeclaration:

import Identifier = ModuleReference ; 

ModuleReference:

ExternalModuleReference 
ModuleName 

ExternalModuleReference:

module (StringLiteral) 
+0

ठीक है, तो क्या यह मेरे आंतरिक मॉड्यूल को Node.js commonjs मॉड्यूल के साथ मिश्रित करना संभव है? जैसे ही मैं अपने आंतरिक मॉड्यूल में आयात x = मॉड्यूल (...) जोड़ता हूं, इसे बाहरी के रूप में माना जाता है। – jzvelc

+0

क्या उन्हें बाहरी बनाया जा सकता है? टाइपस्क्रिप्ट में केवल एक आवश्यकता का उपयोग करने में समस्या यह है कि यह आपको चर पर प्रकार की जानकारी नहीं देगा। – Fenton

+0

हां, मुझे पता है, लेकिन आयात विवरण के माध्यम से मॉड्यूल लोड करना बहुत असुविधाजनक है क्योंकि मुझे टाइपस्क्रिप्ट फ़ाइलों को पूरा पथ प्रदान करना है ... इसके बारे में कोई कामकाज? – jzvelc

0

ठीक है, यह त्रुटि टाइपस्क्रिप्ट के संस्करण के कारण है। टाइपप्रति 0.8.1.1 में एक बाहरी मॉड्यूल वाक्य रचना हो गया है आयात करने के लिए:

export import <moduleName> = module(“<path>”); 

यह एक बग टाइपप्रति के नवीनतम संस्करण में पहचान है, तो आप पिछले संस्करण पर लौटें या इसे बनाने के लिए वाक्य रचना को बदल सकते हैं v0.8.1.1 के साथ संगत। ध्यान रखें कि यह एक बग है और भविष्य के संस्करणों में, आपको मूल वाक्यविन्यास का उपयोग करने में सक्षम होना चाहिए।

यह इस बग के लिए सरकारी धागा है: http://typescript.codeplex.com/discussions/405800

+0

एक मैंने लिखा है, 0.8.1.1 में आयात ठीक काम करता है लेकिन 0.8.2 में पूरा मॉड्यूल अब किसी अन्य आंतरिक मॉड्यूल में उपलब्ध नहीं है। मुझे लगता है कि यह सही व्यवहार है (आयात का उपयोग मॉड्यूल बाहरी बनाता है) और भविष्य के संस्करणों में मौजूद होगा? – jzvelc