2016-01-06 5 views
5

जब एक typings आयात करने import x = require('...') पैटर्न अर्थ विज्ञान में बदलाव होने पर एक package.json typings प्रविष्टि प्रयोग किया जाता है का उपयोग कर (.d.ts) फ़ाइल को आयात की सुविधा है।टाइपप्रति NPM typings परिवर्तन अर्थ विज्ञान

उदाहरण के लिए, निम्नलिखित घोषणा फ़ाइल सफलतापूर्वक आयात जब कोई package.json typings प्रविष्टि प्रयोग किया जाता है, लेकिन यह त्रुटि TS2656 (Exported external package typings file is not a module) जब एक typings प्रवेश के साथ इस्तेमाल किया उत्पन्न करता है:

declare module 'mymodule' { 
    export function myfunc(source: string): string; 
} 

ही जबकि फ़ाइल minus declare module {} आयात सफलतापूर्वक जब पैकेज.जेसन typings प्रविष्टि के साथ उपयोग किया जाता है लेकिनके बिना उपयोग किए जाने पर त्रुटि TS2307 (Cannot find module) उत्पन्न करता हैप्रवेश।

export function myfunc(source: string): string; 

अर्थशास्त्र में परिवर्तन क्यों?

ऐसा लगता है कि आप नई एनपीएम टाइपिंग सुविधा का उपयोग करते हैं, तो आपको अपनी टाइपिंग फ़ाइलों के एनपीएम और गैर-एनपीएम संस्करणों को बनाए रखना होगा।

मैं इस जबकि परियोजना के भीतर ही एक परियोजनाओं typings फ़ाइल का उपयोग करने की कोशिश कर मारा (टाइपप्रति typings प्रविष्टियों के लिए वर्तमान परियोजना की package.json में नहीं लगती है, यह खोज है सीमित करने के लिए ./node_modules करने लगता है)।

टाइपस्क्रिप्ट 1.7.5 के साथ परीक्षण किया गया।

उत्तर

3

प्रति the documentation, typings पैकेज.जेसन में कुंजी main कुंजी के लिए एक एनालॉग है जो एक एकल नोड.जेएस मॉड्यूल को इंगित करता है। इस प्रकार, d.ts फ़ाइल typings द्वारा इंगित की गई है एक निर्यातित मॉड्यूल घोषणा होने की उम्मीद है, डीटीएस बंडल नहीं।

विशिष्ट औचित्य प्रलेखन द्वारा दिए गए है:

कोई औचित्य नहीं है typings संकलित फ़ाइलों के सेट करने के लिए नए संगत स्रोतों लाने नहीं होनी चाहिए; अन्यथा स्रोत फ़ाइलों (यानी .ts फाइलें) उपयोगकर्ता कोड के हिस्से के रूप में संकलक द्वारा विचार की जाएगी और संकलित की जाएगी, और पैकेज में आउटपुट परिणामस्वरूप .js आउटपुट के साथ अधिलेखित किया जा सकता है।

इसके अतिरिक्त, लोडिंग टाइपिंग को उसी लाइब्रेरी के विभिन्न संस्करणों से संभावित विरोधाभासी प्रविष्टियों को लाकर वैश्विक स्कोप को प्रदूषित नहीं करना चाहिए। मॉड्यूल के पास अपना स्वयं का दायरा है, और ग्लोबल नेमस्पेस को प्रदूषित न करें, अगर आपकी टाइपिंग फ़ाइल मॉड्यूल नहीं है, तो यह उपयोगकर्ता के वैश्विक दायरे को प्रदूषित कर देगी, और आपके पैकेज पर निर्भर अन्य पैकेजों के साथ संघर्ष का कारण बन जाएगी। इसी तरह /// <references ... /> वैश्विक दायरे में वैश्विक घोषणाएं ला सकता है और इससे बचा जाना चाहिए।

(व्यक्तिगत रूप से, आपके जैसा, मुझे लगता है कि यह कार्यान्वयन पूरी तरह गलत और मूर्ख है।typings कुंजी ने एक ही फ़ाइल को इंगित किया है जिसमें एकाधिक रिश्तेदार declare module './foo' { … } घोषणाएं हैं जो पूरे पैकेज का वर्णन करती हैं, फाइलस्क्रिप्ट के प्रदूषण से बचने के साधन के रूप में टाइपस्क्रिप्ट-विशिष्ट फ़ाइलों के टन। दुर्भाग्यवश, वह जहाज इस बिंदु पर पहुंचा है, इसलिए आपके पैकेज में केवल आपके जावास्क्रिप्ट मॉड्यूल के साथ टाइपस्क्रिप्ट-विशिष्ट d.ts फ़ाइलों का एक टन होना चाहिए, साथ ही मुख्य मॉड्यूल के टाइपिंग का यह अनावश्यक विवरण होना चाहिए।)

+0

धन्यवाद आप मेरे भ्रम को दूर करने के लिए, मुझे लगता है कि मैं अभी के लिए 'टाइपिंग' कुंजी का उपयोग करने से बचूंगा इसलिए मुझे दो (लगभग समान) '.dts फ़ाइलों को बनाए रखने की आवश्यकता नहीं है। –

+0

यदि यह प्रश्न का उत्तर देता है तो मैं इसकी सराहना करता हूं यदि आप इसे स्वीकृत उत्तर के रूप में चिह्नित करेंगे। धन्यवाद! –

+0

हो गया, मुझे याद दिलाने के लिए धन्यवाद। –

संबंधित मुद्दे