2016-07-02 16 views
19

से सभी फ़ाइलों को आयात करें मैं 100 अलग-अलग टीएस फाइलों के साथ टाइपस्क्रिप्ट के साथ एक बड़ी लाइब्रेरी का निर्माण कर रहा हूं। पहले मैंने अपने सभी वर्गों के लिए निर्यात मॉड्यूल XXX (निर्यात नामस्थान XXX) नाम दिया था, लेकिन किताबों के अनुसार, यह एक अनुशंसित तरीका नहीं है, मुझे इसके बजाय आयात का उपयोग करना चाहिए।टाइपस्क्रिप्ट 1.8 मॉड्यूल: फ़ोल्डर

इसलिए मैंने आयात करने की कोशिश की। यह ठीक काम करता है:

import * as mylib from "./source/source.ts"; 

लेकिन जैसा कि मेरे पास 100 फाइलें हैं, मैं उन सभी के लिए ऐसी लाइन नहीं जोड़ना चाहता हूं। और मैं चाहता हूं कि मेरी सभी कक्षा mylib चर के माध्यम से सुलभ हो।

तो मैं इस कोशिश की:

import * as mylib from "./source/"; 

लेकिन जैसे ही मैं यह कर, मैं: मॉड्यूल './source/' नहीं मिला

सभी आयात करने के लिए एक रास्ता है एक लाइन से एकाधिक फाइलों वाले फ़ोल्डर से कक्षाएं?

उत्तर

28

दोनों मॉड्यूल रिज़ॉल्यूशन रणनीतियों जो टीएससी प्रदान करता है ऐसे व्यवहार का समर्थन नहीं करता है।

1. (does package.json have a typings key? If so, import this file) 
2. import * as mylib from "./source/index.ts"; 
3. import * as mylib from "./source/index.tsx"; 
4. import * as mylib from "./source/index.d.ts"; 

मैं तुम्हें यहाँ नोड शैली मॉड्यूल संकल्प का उपयोग कर रहे संभालने कर रहा हूँ, जो आप शायद के बाद से कर रहे हैं: क्या अपने वांछित इंपोर्ट स्टेटमेंट

import * as mylib from "./source/"; 

वास्तव में क्या कर रही है इस क्रम में जांच करने के लिए है यह अनुशंसित तरीका है। टाइपस्क्रिप्ट में मॉड्यूल रिज़ॉल्यूशन कैसे किया जाता है, इस बारे में अधिक जानकारी के लिए typescript docs देखें।

आमतौर पर, जो आप पूरा करने की कोशिश कर रहे हैं वह index.d.ts फ़ाइल बनाकर है, जो प्रवेश बिंदु के रूप में कार्य करता है जिससे आप अपने शेष मॉड्यूल निर्यात कर रहे हैं। मैं एक उदाहरण के रूप angular2 उपयोग कर रहा हूँ: आपका आम angular2 आयात इस तरह दिखता है:

import { Injectable } from '@angular/core' 

core सिर्फ एक निर्देशिका है कि @angular निर्देशिका के अंदर रहता है। बस अपनी source निर्देशिका की तरह। हालांकि, मूल निर्देशिका में index.d.ts फ़ाइल रहता है:

/** 
* @module 
* @description 
* Starting point to import all public core APIs. 
*/ 
export * from './src/metadata'; 
export * from './src/util'; 
export * from './src/di'; 
.... 
+0

धन्यवाद यह ठीक काम करता है! मैंने इस दृष्टिकोण को लागू करना शुरू कर दिया और एक और सवाल का सामना करना पड़ा: http://stackoverflow.com/questions/38168733/typescript-export-all-functions-in-a-namespace शायद आप इसका उत्तर भी जानते हैं :) – zeroin

+1

और एक अन्य संबंधित प्रश्न - अपनी खुद की परियोजना के भीतर, क्या मैं अपनी कक्षा में उपयोग किए जाने वाले एक-एक करके आयात करने के बजाय सभी वर्गों (index.d.ts का उपयोग कर सकता हूं?) आयात कर सकता हूं? या यह गलत विचार है? – zeroin

+0

मुझे लगता है कि यह अच्छा विचार नहीं है क्योंकि आपका वेबपैक/ब्राउज़रify स्क्रिप्ट लोडर विभिन्न कॉन्फ़िगरेशन के लिए सख्त स्रोत सीमाओं का पता लगाने में असमर्थ है। उदाहरण के लिए व्यवस्थापक मॉड्यूल और इसकी निर्भरता, सार्वजनिक वेबसाइट और इसकी निर्भरताएं। आप हमेशा सभी स्रोतों को डाउनलोड करेंगे, उनमें से कुछ विशेष पृष्ठों के लिए भी उपयोग नहीं किए जाएंगे। – VadimB

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