हिन्दी

बिल्ड समय को अनुकूलित करने और रनटाइम त्रुटियों को रोकने के लिए TypeScript के `import type` सिंटैक्स का अन्वेषण करें। जानें कि टाइप-ओनली इम्पोर्ट और उनके लाभों का उपयोग कैसे करें।

टाइपस्क्रिप्ट इम्पोर्ट टाइप: टाइप-ओनली इम्पोर्ट डिक्लेरेशन में गहराई से उतरें

टाइपस्क्रिप्ट, जावास्क्रिप्ट का एक सुपरसेट है, जो वेब डेवलपमेंट की गतिशील दुनिया में स्टैटिक टाइपिंग लाता है। इसकी प्रमुख विशेषताओं में से एक अन्य मॉड्यूल से टाइप इम्पोर्ट करने की क्षमता है। हालाँकि, उन प्रकारों को इम्पोर्ट करना जिनका उपयोग केवल टाइप चेकिंग के लिए किया जाता है, अंतिम जावास्क्रिप्ट बंडल में अनावश्यक कोड का कारण बन सकता है। इसे संबोधित करने के लिए, टाइपस्क्रिप्ट ने import type सिंटैक्स पेश किया। यह ब्लॉग पोस्ट import type को विस्तार से बताएगा, इसके उद्देश्य, उपयोग, लाभ और संभावित चेतावनियों की व्याख्या करेगा।

import type क्या है?

import type एक टाइपस्क्रिप्ट-विशिष्ट सिंटैक्स है जो आपको मॉड्यूल के किसी भी रनटाइम मान को इम्पोर्ट किए बिना, केवल एक मॉड्यूल से टाइप डेफिनिशन इम्पोर्ट करने की अनुमति देता है। यह विशेष रूप से तब उपयोगी होता है जब आपको टाइप एनोटेशन या टाइप चेकिंग के लिए किसी अन्य मॉड्यूल से किसी टाइप का उपयोग करने की आवश्यकता होती है, लेकिन रनटाइम में इसके किसी भी मान तक पहुंचने की आवश्यकता नहीं होती है। यह सीधे छोटे बंडल आकार में योगदान देता है क्योंकि जावास्क्रिप्ट कंपाइलर संकलन के दौरान इम्पोर्ट किए गए मॉड्यूल को छोड़ देता है यदि यह विशेष रूप से टाइप जानकारी के लिए उपयोग किया जाता है।

import type का उपयोग क्यों करें?

import type का उपयोग करने के कई सम्मोहक कारण हैं:

import type का उपयोग कैसे करें

import type के लिए सिंटैक्स सीधा है। मानक import स्टेटमेंट का उपयोग करने के बजाय, आप import type का उपयोग उस प्रकार के बाद करते हैं जिसे आप इम्पोर्ट करना चाहते हैं। यहाँ एक बुनियादी उदाहरण दिया गया है:

import type { User } from './user';

function greetUser(user: User): string {
  return `Hello, ${user.name}!`;
}

इस उदाहरण में, हम ./user मॉड्यूल से User प्रकार इम्पोर्ट कर रहे हैं। हम केवल greetUser फ़ंक्शन में टाइप एनोटेशन के लिए User प्रकार का उपयोग कर रहे हैं। User मॉड्यूल के मान रनटाइम में एक्सेस योग्य नहीं हैं।

रेगुलर इम्पोर्ट के साथ import type का संयोजन

आप type कीवर्ड का उपयोग करके एक ही स्टेटमेंट में रेगुलर इम्पोर्ट के साथ import type को भी जोड़ सकते हैं:

import { someValue, type User, type Product } from './module';

function processUser(user: User): void {
  // ...
}

console.log(someValue);

इस मामले में, someValue को एक रेगुलर वैल्यू के रूप में इम्पोर्ट किया जाता है, जबकि User और Product को केवल प्रकारों के रूप में इम्पोर्ट किया जाता है। यह आपको एक ही स्टेटमेंट में एक ही मॉड्यूल से वैल्यू और प्रकार दोनों को इम्पोर्ट करने की अनुमति देता है।

सभी को प्रकारों के रूप में इम्पोर्ट करना

यदि आपको किसी भी मान को इम्पोर्ट किए बिना किसी मॉड्यूल से सभी प्रकारों को इम्पोर्ट करने की आवश्यकता है, तो आप import type के साथ नेमस्पेस इम्पोर्ट सिंटैक्स का उपयोग कर सकते हैं:

import type * as Types from './types';

function processData(data: Types.Data): void {
  // ...
}

यहां, हम ./types मॉड्यूल से सभी प्रकारों को Types नेमस्पेस में इम्पोर्ट करते हैं। फिर हम Types. प्रीफिक्स का उपयोग करके प्रकारों तक पहुंच सकते हैं।

विभिन्न परियोजना प्रकारों में उदाहरण

`import type` के लाभ विभिन्न परियोजना प्रकारों पर लागू होते हैं। यहां कुछ उदाहरण दिए गए हैं:

उदाहरण 1: रिएक्ट कंपोनेंट

एक रिएक्ट कंपोनेंट पर विचार करें जो विशिष्ट प्रकारों के साथ प्रॉप्स प्राप्त करता है:

import React from 'react';
import type { User } from './user';

interface Props {
  user: User;
}

const UserProfile: React.FC<Props> = ({ user }) => {
  return (
    <div>
      <h2>User Profile</h2>
      <p>Name: {user.name}</p>
      <p>Email: {user.email}</p>
    </div>
  );
};

export default UserProfile;

इस रिएक्ट उदाहरण में, `import type { User } from './user';` सुनिश्चित करता है कि केवल `User` की टाइप डेफिनिशन इम्पोर्ट की जाए, बंडल आकार का अनुकूलन किया जाए। हम सीधे 'user' मॉड्यूल के मानों का उपयोग नहीं करते हैं; हम केवल उस मॉड्यूल में परिभाषित 'User' *टाइप* का उपयोग कर रहे हैं।

उदाहरण 2: Node.js बैकएंड

Node.js बैकएंड एप्लिकेशन में, आप डेटाबेस मॉडल को प्रकारों के रूप में परिभाषित कर सकते हैं:

import type { User } from './models';
import { createUser } from './db';

async function registerUser(userData: User): Promise<void> {
  await createUser(userData);
}

यहां, `import type { User } from './models';` पूरे `models` मॉड्यूल को बंडल में शामिल करने से बचाता है यदि टाइप चेकिंग के लिए केवल `User` प्रकार की आवश्यकता है। `createUser` फ़ंक्शन *इम्पोर्ट किया गया है* क्योंकि यह *रनटाइम* उपयोग के लिए आवश्यक है।

उदाहरण 3: एंगुलर सर्विस

एक एंगुलर सर्विस में, आप एक सर्विस इंजेक्ट कर सकते हैं जो एक प्रकार का उपयोग करती है:

import { Injectable } from '@angular/core';
import type { Product } from './product.model';
import { ProductService } from './product.service';

@Injectable({
  providedIn: 'root',
})
export class OrderService {
  constructor(private productService: ProductService) {}

  getFeaturedProducts(): Product[] {
    return this.productService.getProducts().filter(p => p.isFeatured);
  }
}

`Product` प्रकार का उपयोग `productService.getProducts()` विधि द्वारा लौटाए गए डेटा की संरचना को परिभाषित करने के लिए किया जाता है। `import type { Product } from './product.model';` का उपयोग यह सुनिश्चित करता है कि केवल टाइप जानकारी इम्पोर्ट की जाए, जिससे एंगुलर एप्लिकेशन का प्रदर्शन बेहतर हो। `ProductService` *एक रनटाइम डिपेंडेंसी है*।

विभिन्न विकास वातावरणों में import type का उपयोग करने के लाभ

import type का उपयोग करने के फायदे विभिन्न विकास सेटअपों में फैले हुए हैं:

संभावित चेतावनियाँ

जबकि import type आम तौर पर फायदेमंद है, कुछ चेतावनियों के बारे में पता होना चाहिए:

import type का उपयोग करने के लिए सर्वश्रेष्ठ अभ्यास

import type का प्रभावी ढंग से उपयोग करने के लिए, निम्नलिखित सर्वोत्तम प्रथाओं पर विचार करें:

अंतर्राष्ट्रीयकरण (i18n) और स्थानीयकरण (l10n) विचार

अंतर्राष्ट्रीयकरण (i18n) और स्थानीयकरण (l10n) की आवश्यकता वाली परियोजनाओं पर काम करते समय, यह विचार करना आवश्यक है कि import type आपके कोड को कैसे प्रभावित कर सकता है। ध्यान रखने योग्य कुछ बातें यहां दी गई हैं:

विभिन्न देशों में उदाहरण

यहां कुछ उदाहरण दिए गए हैं जो यह दर्शाते हैं कि विभिन्न देशों में विभिन्न परिदृश्यों में import type का उपयोग कैसे किया जा सकता है:

निष्कर्ष

import type टाइपस्क्रिप्ट में एक शक्तिशाली सुविधा है जो आपको किसी मॉड्यूल से केवल टाइप डेफिनिशन इम्पोर्ट करके अपने कोड को अनुकूलित करने की अनुमति देती है, बिना इसके किसी भी रनटाइम वैल्यू को इम्पोर्ट किए। इससे बेहतर बंडल आकार, कम सर्कुलर डिपेंडेंसी, बेहतर प्रदर्शन और बेहतर कोड क्लैरिटी हो सकती है। इस ब्लॉग पोस्ट में बताए गए सर्वोत्तम प्रथाओं का पालन करके, आप अधिक कुशल और बनाए रखने योग्य टाइपस्क्रिप्ट कोड लिखने के लिए import type का प्रभावी ढंग से उपयोग कर सकते हैं। जैसे-जैसे टाइपस्क्रिप्ट विकसित होता जा रहा है, स्केलेबल और प्रदर्शनकारी एप्लिकेशन बनाने के लिए import type जैसी सुविधाओं को अपनाना महत्वपूर्ण है।