मैंने अभी जावास्क्रिप्ट लाइब्रेरी को टाइपस्क्रिप्ट में परिवर्तित कर दिया है। मेरी समस्या यह है कि मुझे नहीं पता कि इसे कैसे व्यवस्थित किया जाए। यह घटकों सहित एक पुस्तकालय है, प्रत्येक, विभिन्न वर्गों, प्रकारों, त्रुटि वर्गों, आदि का उपयोग करते हुए ... कुछ घटक अन्य घटकों पर निर्भर करते हैं।

मेरा प्रारंभिक दृष्टिकोण सब कुछ मूल स्तर पर निर्यात करना था।

export * from "./component1";
export * from "./component2";
export * from "./component3";

तो मैं इसे इस तरह उपयोग कर सकता हूं:

import { MyClassFromComponent1, MyTypeFromComponent2 } from "mylib"

इसका उपयोग करना ठीक है, लेकिन यह सब एक ही स्थान पर है और आईडीई और स्वत: पूर्णता के साथ, यह एक प्रकार का गन्दा है।

मेरा दूसरा दृष्टिकोण सभी घटकों को आयात करना और उनमें से प्रत्येक को रूट इंडेक्स में स्थिरांक के रूप में निर्यात करना था

import * as _component1 from "./component1";
import * as _component2 from "./component2";
import * as _component3 from "./component3";

export const component1 = _component1;
export const component2 = _component2;
export const component3 = _component3;

और मैं इसे इस तरह उपयोग करने में सक्षम था:

import component1 from "mylib"

const { MyClass1 } = component1;

लेकिन इस तरह, मैं टाइपस्क्रिप्ट प्रकार आयात करने में असमर्थ हूं और मैं आयात विनाशकारी करने में सक्षम नहीं हूं (बेशक यह नामित आयात के साथ समर्थित नहीं है)

import { component1: { MyClassComponent1 } } from "mylib"

क्या इस तरह के मामले को संभालने का कोई अनुशंसित तरीका है? नामस्थानों के बारे में क्या (मुझे कहना है कि यह अभी भी मुझे भ्रमित कर रहा है)।

1
Vincent 17 सितंबर 2018, 20:50

1 उत्तर

सबसे बढ़िया उत्तर

आज का सबसे अच्छा तरीका है:

  • सरल कार्यों, वर्गों, स्थिरांक को निर्यात करें, जैसे वे किसी वस्तु या वर्ग में लपेटे नहीं हैं। तो आपका पहला तरीका import { MyClassFromComponent1, MyTypeFromComponent2 } from "mylib" बहुत अच्छा है (मैं नेमस्पेसिंग के बारे में बाद में चर्चा करूंगा)। इस तरह आपका पैकेज ट्री-शेकेबल होगा, जिसका सीधा सा मतलब है कि वेबपैक/पार्सर जैसा बंडलर केवल आपके पैकेज से वही निकाल सकता है जिसकी उपयोगकर्ता को वास्तव में आवश्यकता होती है।
  • डिफ़ॉल्ट निर्यात से बचें। सच कहूं तो मैं क्यों भूल गया, लेकिन यह आजकल एक परंपरा है।

नेमस्पेसिंग के बारे में सामान्य तरीका सिर्फ main स्क्रिप्ट (जो package.json के main फ़ील्ड द्वारा परिभाषित किया गया है) में मुख्य कार्य, कक्षाएं और अन्य निर्यात योग्य है। कोई भी अन्य सामान आमतौर पर उसके अपने सबफ़ोल्डर में रखा जाता है (यह सबफ़ोल्डर उसी स्थान पर main स्क्रिप्ट के साथ स्थित है)। तो आपके पैकेज से सामान आयात करना इस तरह दिखेगा:

import {importantFunc, importantComponent} from "mylib"
import {secondaryStuff} from "mylib/feature1"

मेरा व्यक्तिगत दृष्टिकोण, हालांकि, यदि आप रुचि रखते हैं, तो main स्क्रिप्ट और सभी सबफ़ोल्डर्स को "./api" फ़ोल्डर में रखना है, इसलिए आयात इस तरह दिखेगा:

import {importantFunc, importantComponent} from "mylib/api"
import {secondaryStuff} from "mylib/api/feature1"

मुझे यह तरीका पसंद है क्योंकि यह उपयोगकर्ता को स्पष्ट रूप से बताता है कि पैकेज द्वारा वास्तव में क्या उजागर किया गया है। अन्यथा, यदि "mylib/feature1" आयात करने योग्य है (अर्थात API का हिस्सा है) या यह पैकेज की केवल आंतरिक सामग्री है, तो उपयोगकर्ता आश्वस्त नहीं हो सकता है।

0
Nurbol Alpysbayev 18 सितंबर 2018, 01:20