தமிழ்

டைப்ஸ்கிரிப்ட் நேம்ஸ்பேஸ் இணைப்பின் ஆற்றலைத் திறந்திடுங்கள்! இந்த வழிகாட்டி மாடுலாரிட்டி, நீட்டிப்புத்திறன் மற்றும் தூய்மையான குறியீட்டிற்கான மேம்பட்ட மாட்யூல் அறிவிப்பு முறைகளை உலகளாவிய டைப்ஸ்கிரிப்ட் டெவலப்பர்களுக்கான நடைமுறை எடுத்துக்காட்டுகளுடன் ஆராய்கிறது.

டைப்ஸ்கிரிப்ட் நேம்ஸ்பேஸ் இணைத்தல்: மேம்பட்ட மாட்யூல் அறிவிப்பு முறைகள்

உங்கள் குறியீட்டை கட்டமைக்கவும் ஒழுங்கமைக்கவும் டைப்ஸ்கிரிப்ட் சக்திவாய்ந்த அம்சங்களை வழங்குகிறது. அவற்றில் ஒன்று நேம்ஸ்பேஸ் இணைத்தல் ஆகும், இது ஒரே பெயரில் பல நேம்ஸ்பேஸ்களை வரையறுக்க உங்களை அனுமதிக்கிறது, மேலும் டைப்ஸ்கிரிப்ட் அவற்றின் அறிவிப்புகளை தானாகவே ஒரே நேம்ஸ்பேஸில் இணைக்கும். இந்த திறன் தற்போதுள்ள லைப்ரரிகளை விரிவுபடுத்துவதற்கும், மாடுலர் பயன்பாடுகளை உருவாக்குவதற்கும், சிக்கலான வகை வரையறைகளை நிர்வகிப்பதற்கும் மிகவும் பயனுள்ளதாக இருக்கும். இந்த வழிகாட்டி நேம்ஸ்பேஸ் இணைப்பைப் பயன்படுத்துவதற்கான மேம்பட்ட முறைகளை ஆராய்ந்து, தூய்மையான, மேலும் பராமரிக்கக்கூடிய டைப்ஸ்கிரிப்ட் குறியீட்டை எழுத உங்களுக்கு அதிகாரம் அளிக்கும்.

நேம்ஸ்பேஸ்கள் மற்றும் மாட்யூல்களைப் புரிந்துகொள்ளுதல்

நேம்ஸ்பேஸ் இணைப்பைப் பற்றி ஆராய்வதற்கு முன், டைப்ஸ்கிரிப்டில் நேம்ஸ்பேஸ்கள் மற்றும் மாட்யூல்களின் அடிப்படைக் கருத்துக்களைப் புரிந்துகொள்வது முக்கியம். இரண்டும் குறியீடு அமைப்பிற்கான வழிமுறைகளை வழங்கினாலும், அவற்றின் நோக்கம் மற்றும் பயன்பாட்டில் அவை கணிசமாக வேறுபடுகின்றன.

நேம்ஸ்பேஸ்கள் (உள் மாட்யூல்கள்)

நேம்ஸ்பேஸ்கள் என்பது தொடர்புடைய குறியீடுகளை ஒன்றாக குழுவாக்குவதற்கான ஒரு டைப்ஸ்கிரிப்ட்-குறிப்பிட்ட கட்டமைப்பாகும். அவை அடிப்படையில் உங்கள் ஃபங்ஷன்கள், கிளாஸ்கள், இன்டர்ஃபேஸ்கள் மற்றும் வேரியபிள்களுக்கான பெயரிடப்பட்ட கொள்கலன்களை உருவாக்குகின்றன. நேம்ஸ்பேஸ்கள் முதன்மையாக ஒரு டைப்ஸ்கிரிப்ட் திட்டத்திற்குள் உள் குறியீடு அமைப்பிற்காகப் பயன்படுத்தப்படுகின்றன. இருப்பினும், ES மாட்யூல்களின் வளர்ச்சியுடன், பழைய குறியீட்டுத் தளங்களுடன் இணக்கத்தன்மை அல்லது குறிப்பிட்ட குளோபல் ஆக்மென்டேஷன் காட்சிகள் தேவைப்படாவிட்டால், புதிய திட்டங்களுக்கு நேம்ஸ்பேஸ்கள் பொதுவாக குறைவாகவே விரும்பப்படுகின்றன.

உதாரணம்:


namespace Geometry {
  export interface Shape {
    getArea(): number;
  }

  export class Circle implements Shape {
    constructor(public radius: number) {}

    getArea(): number {
      return Math.PI * this.radius * this.radius;
    }
  }
}

const myCircle = new Geometry.Circle(5);
console.log(myCircle.getArea()); // Output: 78.53981633974483

மாட்யூல்கள் (வெளி மாட்யூல்கள்)

மாட்யூல்கள், மறுபுறம், ES மாட்யூல்கள் (ECMAScript மாட்யூல்கள்) மற்றும் CommonJS ஆல் வரையறுக்கப்பட்ட குறியீட்டை ஒழுங்கமைப்பதற்கான ஒரு தரப்படுத்தப்பட்ட வழியாகும். மாட்யூல்கள் அவற்றின் சொந்த ஸ்கோப்பைக் கொண்டுள்ளன மற்றும் மதிப்புகளை வெளிப்படையாக இறக்குமதி மற்றும் ஏற்றுமதி செய்கின்றன, இது அவற்றை மீண்டும் பயன்படுத்தக்கூடிய கூறுகள் மற்றும் லைப்ரரிகளை உருவாக்குவதற்கு ஏற்றதாக ஆக்குகிறது. நவீன ஜாவாஸ்கிரிப்ட் மற்றும் டைப்ஸ்கிரிப்ட் மேம்பாட்டில் ES மாட்யூல்கள் தரநிலையாக உள்ளன.

உதாரணம்:


// circle.ts
export interface Shape {
  getArea(): number;
}

export class Circle implements Shape {
  constructor(public radius: number) {}

  getArea(): number {
    return Math.PI * this.radius * this.radius;
  }
}

// app.ts
import { Circle } from './circle';

const myCircle = new Circle(5);
console.log(myCircle.getArea());

நேம்ஸ்பேஸ் இணைப்பின் ஆற்றல்

ஒரே நேம்ஸ்பேஸ் பெயருடன் பல குறியீட்டுத் தொகுதிகளை வரையறுக்க நேம்ஸ்பேஸ் இணைத்தல் உங்களை அனுமதிக்கிறது. டைப்ஸ்கிரிப்ட் இந்த அறிவிப்புகளை கம்பைல் நேரத்தில் புத்திசாலித்தனமாக ஒரே நேம்ஸ்பேஸில் இணைக்கிறது. இந்த திறன் பின்வருவனவற்றிற்கு விலைமதிப்பற்றது:

நேம்ஸ்பேஸ் இணைப்பைக் கொண்ட மேம்பட்ட மாட்யூல் அறிவிப்பு முறைகள்

உங்கள் டைப்ஸ்கிரிப்ட் திட்டங்களில் நேம்ஸ்பேஸ் இணைப்பைப் பயன்படுத்துவதற்கான சில மேம்பட்ட முறைகளை ஆராய்வோம்.

1. ஆம்பியன்ட் அறிவிப்புகள் மூலம் ஏற்கனவே உள்ள லைப்ரரிகளை நீட்டித்தல்

நேம்ஸ்பேஸ் இணைப்பின் மிகவும் பொதுவான பயன்பாட்டு நிகழ்வுகளில் ஒன்று, தற்போதுள்ள ஜாவாஸ்கிரிப்ட் லைப்ரரிகளை டைப்ஸ்கிரிப்ட் வகை வரையறைகளுடன் நீட்டிப்பதாகும். நீங்கள் `my-library` என்ற ஜாவாஸ்கிரிப்ட் லைப்ரரியைப் பயன்படுத்துகிறீர்கள் என்று கற்பனை செய்து கொள்ளுங்கள், அதற்கு அதிகாரப்பூர்வ டைப்ஸ்கிரிப்ட் ஆதரவு இல்லை. இந்த லைப்ரரிக்கான வகைகளை வரையறுக்க நீங்கள் ஒரு ஆம்பியன்ட் அறிவிப்புக் கோப்பை (எ.கா., `my-library.d.ts`) உருவாக்கலாம்.

உதாரணம்:


// my-library.d.ts
declare namespace MyLibrary {
  interface Options {
    apiKey: string;
    timeout?: number;
  }

  function initialize(options: Options): void;
  function fetchData(endpoint: string): Promise;
}

இப்போது, உங்கள் டைப்ஸ்கிரிப்ட் குறியீட்டில் `MyLibrary` நேம்ஸ்பேஸை வகை பாதுகாப்புடன் பயன்படுத்தலாம்:


// app.ts
MyLibrary.initialize({
  apiKey: 'YOUR_API_KEY',
  timeout: 5000,
});

MyLibrary.fetchData('/api/data')
  .then(data => {
    console.log(data);
  });

பின்னர் `MyLibrary` வகை வரையறைகளில் மேலும் செயல்பாடுகளைச் சேர்க்க விரும்பினால், நீங்கள் மற்றொரு `my-library.d.ts` கோப்பை உருவாக்கலாம் அல்லது ஏற்கனவே உள்ள கோப்பில் சேர்க்கலாம்:


// my-library.d.ts

declare namespace MyLibrary {
  interface Options {
    apiKey: string;
    timeout?: number;
  }

  function initialize(options: Options): void;
  function fetchData(endpoint: string): Promise;

  // MyLibrary நேம்ஸ்பேஸில் ஒரு புதிய ஃபங்ஷனைச் சேர்க்கவும்
  function processData(data: any): any;
}

டைப்ஸ்கிரிப்ட் இந்த அறிவிப்புகளை தானாகவே இணைக்கும், இது புதிய `processData` ஃபங்ஷனைப் பயன்படுத்த உங்களை அனுமதிக்கும்.

2. குளோபல் ஆப்ஜெக்ட்களை மேம்படுத்துதல்

சில நேரங்களில், `String`, `Number` அல்லது `Array` போன்ற ஏற்கனவே உள்ள குளோபல் ஆப்ஜெக்ட்களில் பண்புகள் அல்லது மெத்தடுகளைச் சேர்க்க நீங்கள் விரும்பலாம். நேம்ஸ்பேஸ் இணைத்தல் இதை பாதுகாப்பாகவும் வகை சரிபார்ப்புடனும் செய்ய உங்களை அனுமதிக்கிறது.

உதாரணம்:


// string.extensions.d.ts
declare global {
  interface String {
    reverse(): string;
  }
}

String.prototype.reverse = function() {
  return this.split('').reverse().join('');
};

console.log('hello'.reverse()); // Output: olleh

இந்த எடுத்துக்காட்டில், நாம் `String` புரோட்டோடைப்பில் ஒரு `reverse` மெத்தடைச் சேர்க்கிறோம். `declare global` தொடரியல், நாம் ஒரு குளோபல் ஆப்ஜெக்டை மாற்றுகிறோம் என்று டைப்ஸ்கிரிப்டிடம் கூறுகிறது. இது சாத்தியம் என்றாலும், குளோபல் ஆப்ஜெக்ட்களை மேம்படுத்துவது சில சமயங்களில் மற்ற லைப்ரரிகள் அல்லது எதிர்கால ஜாவாஸ்கிரிப்ட் தரங்களுடன் முரண்பாடுகளுக்கு வழிவகுக்கும் என்பதை கவனத்தில் கொள்ள வேண்டும். இந்த நுட்பத்தை விவேகத்துடன் பயன்படுத்தவும்.

சர்வதேசமயமாக்கல் பரிசீலனைகள்: குளோபல் ஆப்ஜெக்ட்களை, குறிப்பாக ஸ்டிரிங் அல்லது எண்களை கையாளும் மெத்தடுகளுடன் மேம்படுத்தும்போது, சர்வதேசமயமாக்கலைப் பற்றி கவனத்தில் கொள்ளுங்கள். மேலே உள்ள `reverse` ஃபங்ஷன் அடிப்படை ASCII ஸ்டிரிங்குகளுக்கு வேலை செய்யும், ஆனால் சிக்கலான எழுத்துத் தொகுப்புகள் அல்லது வலமிருந்து இடமாக எழுதும் திசை கொண்ட மொழிகளுக்கு அது பொருத்தமானதாக இருக்காது. வட்டார மொழிக்கு ஏற்ற ஸ்டிரிங் கையாளுதலுக்கு `Intl` போன்ற லைப்ரரிகளைப் பயன்படுத்தவும்.

3. பெரிய நேம்ஸ்பேஸ்களை மாடுலரைஸ் செய்தல்

பெரிய மற்றும் சிக்கலான நேம்ஸ்பேஸ்களுடன் பணிபுரியும் போது, அவற்றை சிறிய, நிர்வகிக்க எளிதான கோப்புகளாகப் பிரிப்பது நன்மை பயக்கும். நேம்ஸ்பேஸ் இணைத்தல் இதை எளிதாக அடைய உதவுகிறது.

உதாரணம்:


// geometry.ts
namespace Geometry {
  export interface Shape {
    getArea(): number;
  }
}

// circle.ts
namespace Geometry {
  export class Circle implements Shape {
    constructor(public radius: number) {}

    getArea(): number {
      return Math.PI * this.radius * this.radius;
    }
  }
}

// rectangle.ts
namespace Geometry {
  export class Rectangle implements Shape {
    constructor(public width: number, public height: number) {}

    getArea(): number {
      return this.width * this.height;
    }
  }
}

// app.ts
/// 
/// 
/// 

const myCircle = new Geometry.Circle(5);
const myRectangle = new Geometry.Rectangle(10, 5);

console.log(myCircle.getArea()); // Output: 78.53981633974483
console.log(myRectangle.getArea()); // Output: 50

இந்த எடுத்துக்காட்டில், நாம் `Geometry` நேம்ஸ்பேஸை `geometry.ts`, `circle.ts`, மற்றும் `rectangle.ts` ஆகிய மூன்று கோப்புகளாகப் பிரித்துள்ளோம். ஒவ்வொரு கோப்பும் `Geometry` நேம்ஸ்பேஸிற்கு பங்களிக்கிறது, மேலும் டைப்ஸ்கிரிப்ட் அவற்றை ஒன்றாக இணைக்கிறது. `/// ` டைரக்டிவ்களின் பயன்பாட்டைக் கவனியுங்கள். இவை வேலை செய்தாலும், இது ஒரு பழைய அணுகுமுறையாகும், மேலும் நேம்ஸ்பேஸ்களைப் பயன்படுத்தும் போது கூட, நவீன டைப்ஸ்கிரிப்ட் திட்டங்களில் ES மாட்யூல்களைப் பயன்படுத்துவது பொதுவாக விரும்பப்படுகிறது.

நவீன மாட்யூல் அணுகுமுறை (விரும்பத்தக்கது):


// geometry.ts
export namespace Geometry {
  export interface Shape {
    getArea(): number;
  }
}

// circle.ts
import { Geometry } from './geometry';

export namespace Geometry {
  export class Circle implements Shape {
    constructor(public radius: number) {}

    getArea(): number {
      return Math.PI * this.radius * this.radius;
    }
  }
}

// rectangle.ts
import { Geometry } from './geometry';

export namespace Geometry {
  export class Rectangle implements Shape {
    constructor(public width: number, public height: number) {}

    getArea(): number {
      return this.width * this.height;
    }
  }
}

// app.ts
import { Geometry } from './geometry';
const myCircle = new Geometry.Circle(5);
const myRectangle = new Geometry.Rectangle(10, 5);

console.log(myCircle.getArea());
console.log(myRectangle.getArea());

இந்த அணுகுமுறை ES மாட்யூல்களை நேம்ஸ்பேஸ்களுடன் பயன்படுத்துகிறது, இது சிறந்த மாடுலாரிட்டி மற்றும் நவீன ஜாவாஸ்கிரிப்ட் கருவிகளுடன் இணக்கத்தன்மையை வழங்குகிறது.

4. இன்டர்ஃபேஸ் ஆக்மென்டேஷனுடன் நேம்ஸ்பேஸ் இணைப்பைப் பயன்படுத்துதல்

நேம்ஸ்பேஸ் இணைத்தல் பெரும்பாலும் இன்டர்ஃபேஸ் ஆக்மென்டேஷனுடன் இணைந்து ஏற்கனவே உள்ள வகைகளின் திறன்களை நீட்டிக்கப் பயன்படுகிறது. இது பிற லைப்ரரிகள் அல்லது மாட்யூல்களில் வரையறுக்கப்பட்ட இன்டர்ஃபேஸ்களில் புதிய பண்புகள் அல்லது மெத்தடுகளைச் சேர்க்க உங்களை அனுமதிக்கிறது.

உதாரணம்:


// user.ts
interface User {
  id: number;
  name: string;
}

// user.extensions.ts
namespace User {
  export interface User {
    email: string;
  }
}

// app.ts
import { User } from './user'; // user.ts User இன்டர்ஃபேஸை ஏற்றுமதி செய்கிறது என்று ধরেக்கொள்வோம்
import './user.extensions'; // பக்க விளைவுக்காக இறக்குமதி: User இன்டர்ஃபேஸை ஆக்மென்ட் செய்ய

const myUser: User = {
  id: 123,
  name: 'John Doe',
  email: 'john.doe@example.com',
};

console.log(myUser.name);
console.log(myUser.email);

இந்த எடுத்துக்காட்டில், நேம்ஸ்பேஸ் இணைத்தல் மற்றும் இன்டர்ஃபேஸ் ஆக்மென்டேஷனைப் பயன்படுத்தி `User` இன்டர்ஃபேஸில் ஒரு `email` பண்பைச் சேர்க்கிறோம். `user.extensions.ts` கோப்பு `User` இன்டர்ஃபேஸை ஆக்மென்ட் செய்கிறது. `app.ts` இல் `./user.extensions` இன் இறக்குமதியைக் கவனியுங்கள். இந்த இறக்குமதி `User` இன்டர்ஃபேஸை ஆக்மென்ட் செய்யும் அதன் பக்க விளைவுக்காக மட்டுமே உள்ளது. இந்த இறக்குமதி இல்லாமல், ஆக்மென்டேஷன் நடைமுறைக்கு வராது.

நேம்ஸ்பேஸ் இணைப்பிற்கான சிறந்த நடைமுறைகள்

நேம்ஸ்பேஸ் இணைத்தல் ஒரு சக்திவாய்ந்த அம்சம் என்றாலும், சாத்தியமான சிக்கல்களைத் தவிர்க்க அதை விவேகத்துடன் பயன்படுத்துவது மற்றும் சிறந்த நடைமுறைகளைப் பின்பற்றுவது அவசியம்:

உலகளாவிய பரிசீலனைகள்

உலகளாவிய பார்வையாளர்களுக்காக பயன்பாடுகளை உருவாக்கும் போது, நேம்ஸ்பேஸ் இணைப்பைப் பயன்படுத்தும் போது பின்வரும் பரிசீலனைகளை மனதில் கொள்ளுங்கள்:

`Intl` (Internationalization API) உடன் உள்ளூர்மயமாக்கலின் உதாரணம்:


// number.extensions.d.ts
declare global {
  interface Number {
    toCurrencyString(locale: string, currency: string): string;
  }
}

Number.prototype.toCurrencyString = function(locale: string, currency: string) {
  return new Intl.NumberFormat(locale, {
    style: 'currency',
    currency: currency,
  }).format(this);
};

const price = 1234.56;

console.log(price.toCurrencyString('en-US', 'USD')); // Output: $1,234.56
console.log(price.toCurrencyString('de-DE', 'EUR')); // Output: 1.234,56 €
console.log(price.toCurrencyString('ja-JP', 'JPY')); // Output: ¥1,235

இந்த உதாரணம், `Intl.NumberFormat` API ஐப் பயன்படுத்தி `Number` புரோட்டோடைப்பில் `toCurrencyString` மெத்தடை எவ்வாறு சேர்ப்பது என்பதைக் காட்டுகிறது, இது வெவ்வேறு வட்டாரங்கள் மற்றும் நாணயங்களுக்கு ஏற்ப எண்களை வடிவமைக்க உங்களை அனுமதிக்கிறது.

முடிவுரை

டைப்ஸ்கிரிப்ட் நேம்ஸ்பேஸ் இணைத்தல் என்பது லைப்ரரிகளை நீட்டிப்பதற்கும், குறியீட்டை மாடுலரைஸ் செய்வதற்கும், சிக்கலான வகை வரையறைகளை நிர்வகிப்பதற்கும் ஒரு சக்திவாய்ந்த கருவியாகும். இந்த வழிகாட்டியில் கோடிட்டுக் காட்டப்பட்டுள்ள மேம்பட்ட முறைகள் மற்றும் சிறந்த நடைமுறைகளைப் புரிந்துகொள்வதன் மூலம், நேம்ஸ்பேஸ் இணைப்பைப் பயன்படுத்தி தூய்மையான, மேலும் பராமரிக்கக்கூடிய மற்றும் மேலும் அளவிடக்கூடிய டைப்ஸ்கிரிப்ட் குறியீட்டை எழுதலாம். இருப்பினும், புதிய திட்டங்களுக்கு ES மாட்யூல்கள் பெரும்பாலும் விரும்பப்படும் அணுகுமுறையாகும் என்பதையும், நேம்ஸ்பேஸ் இணைத்தல் தந்திரோபாயமாகவும் விவேகமாகவும் பயன்படுத்தப்பட வேண்டும் என்பதையும் நினைவில் கொள்ளுங்கள். உங்கள் பயன்பாடுகள் உலகெங்கிலும் உள்ள பயனர்களால் அணுகக்கூடியதாகவும் பயன்படுத்தக்கூடியதாகவும் இருப்பதை உறுதிசெய்ய, உங்கள் குறியீட்டின் உலகளாவிய தாக்கங்களை, குறிப்பாக உள்ளூர்மயமாக்கல், எழுத்து குறியாக்கம் மற்றும் கலாச்சார மரபுகள் ஆகியவற்றைக் கையாளும் போது எப்போதும் கருத்தில் கொள்ளுங்கள்.