தமிழ்

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

டைப்ஸ்கிரிப்ட் டெக்லரேஷன் மெர்ஜிங்: இன்டர்ஃபேஸ் நீட்டிப்பு மாஸ்டரி

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

டெக்லரேஷன் மெர்ஜிங்கைப் புரிந்துகொள்ளுதல்

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

முக்கிய கருத்துக்கள்

டெக்லரேஷன் மெர்ஜிங் மூலம் இன்டர்ஃபேஸ் நீட்டிப்பு

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

அடிப்படை எடுத்துக்காட்டு

ஒரு எளிய எடுத்துக்காட்டுடன் தொடங்குவோம். உங்களிடம் Person என்ற பெயரில் ஒரு இன்டர்ஃபேஸ் இருப்பதாக வைத்துக்கொள்வோம்:

interface Person {
  name: string;
  age: number;
}

இப்போது, நீங்கள் அசல் டெக்லரேஷனை மாற்றாமல் Person இன்டர்ஃபேஸில் விருப்பத்தேர்வான email பண்பைச் சேர்க்க விரும்புகிறீர்கள். டெக்லரேஷன் மெர்ஜிங்கைப் பயன்படுத்தி இதை நீங்கள் அடையலாம்:

interface Person {
  email?: string;
}

டைப்ஸ்கிரிப்ட் இந்த இரண்டு டெக்லரேஷன்களையும் ஒரே Person இன்டர்ஃபேஸாக இணைக்கும்:

interface Person {
  name: string;
  age: number;
  email?: string;
}

இப்போது, புதிய email பண்புடன் நீட்டிக்கப்பட்ட Person இன்டர்ஃபேஸை நீங்கள் பயன்படுத்தலாம்:

const person: Person = {
  name: "Alice",
  age: 30,
  email: "alice@example.com",
};

const anotherPerson: Person = {
  name: "Bob",
  age: 25,
};

console.log(person.email); // Output: alice@example.com
console.log(anotherPerson.email); // Output: undefined

வெளிப்புற லைப்ரரிகளிலிருந்து இன்டர்ஃபேஸ்களை நீட்டித்தல்

டெக்லரேஷன் மெர்ஜிங்கின் ஒரு பொதுவான பயன்பாடு, வெளிப்புற லைப்ரரிகளில் வரையறுக்கப்பட்ட இன்டர்ஃபேஸ்களை நீட்டிப்பதாகும். நீங்கள் Product என்ற இன்டர்ஃபேஸை வழங்கும் ஒரு லைப்ரரியைப் பயன்படுத்துகிறீர்கள் என்று வைத்துக்கொள்வோம்:

// From an external library
interface Product {
  id: number;
  name: string;
  price: number;
}

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

// In your code
interface Product {
  description?: string;
}

இப்போது, புதிய description பண்புடன் நீட்டிக்கப்பட்ட Product இன்டர்ஃபேஸை நீங்கள் பயன்படுத்தலாம்:

const product: Product = {
  id: 123,
  name: "Laptop",
  price: 1200,
  description: "A powerful laptop for professionals",
};

console.log(product.description); // Output: A powerful laptop for professionals

நடைமுறை எடுத்துக்காட்டுகள் மற்றும் பயன்பாட்டு வழக்குகள்

இன்டர்ஃபேஸ் நீட்டிப்புடன் டெக்லரேஷன் மெர்ஜிங் குறிப்பாகப் பயனளிக்கக்கூடிய சில நடைமுறை எடுத்துக்காட்டுகள் மற்றும் பயன்பாட்டு வழக்குகளை ஆராய்வோம்.

1. Request மற்றும் Response ஆப்ஜெக்ட்களில் பண்புகளைச் சேர்த்தல்

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

எடுத்துக்காட்டு:

// Express.js
import express from 'express';

// Extend the Request interface
declare global {
  namespace Express {
    interface Request {
      userId?: string;
    }
  }
}

const app = express();

app.use((req, res, next) => {
  // Simulate authentication
  req.userId = "user123";
  next();
});

app.get('/', (req, res) => {
  const userId = req.userId;
  res.send(`Hello, user ${userId}!`);
});

app.listen(3000, () => {
  console.log('Server listening on port 3000');
});

இந்த எடுத்துக்காட்டில், userId பண்பைச் சேர்க்க Express.Request இன்டர்ஃபேஸை நீட்டிக்கிறோம். இது அங்கீகாரத்தின் போது request ஆப்ஜெக்டில் பயனர் ஐடியைச் சேமிக்கவும், அடுத்தடுத்த மிடில்வேர் மற்றும் ரூட் ஹேண்ட்லர்களில் அதை அணுகவும் அனுமதிக்கிறது.

2. உள்ளமைவு ஆப்ஜெக்ட்களை நீட்டித்தல்

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

எடுத்துக்காட்டு:

// Library configuration interface
interface Config {
  apiUrl: string;
  timeout: number;
}

// Extend the configuration interface
interface Config {
  debugMode?: boolean;
}

const defaultConfig: Config = {
  apiUrl: "https://api.example.com",
  timeout: 5000,
  debugMode: true,
};

// Function that uses the configuration
function fetchData(config: Config) {
  console.log(`Fetching data from ${config.apiUrl}`);
  console.log(`Timeout: ${config.timeout}ms`);
  if (config.debugMode) {
    console.log("Debug mode enabled");
  }
}

fetchData(defaultConfig);

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

3. ஏற்கனவே உள்ள கிளாஸ்களில் தனிப்பயன் மெத்தடுகளைச் சேர்த்தல் (Mixins)

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

எடுத்துக்காட்டு:

// Base class
class Logger {
  log(message: string) {
    console.log(`[LOG]: ${message}`);
  }
}

// Interface for the mixin
interface Timestamped {
  timestamp: Date;
  getTimestamp(): string;
}

// Mixin function
function Timestamped(Base: T) {
  return class extends Base implements Timestamped {
    timestamp: Date = new Date();

    getTimestamp(): string {
      return this.timestamp.toISOString();
    }
  };
}

type Constructor = new (...args: any[]) => {};

// Apply the mixin
const TimestampedLogger = Timestamped(Logger);

// Usage
const logger = new TimestampedLogger();
logger.log("Hello, world!");
console.log(logger.getTimestamp());

இந்த எடுத்துக்காட்டில், Timestamped என்ற ஒரு மிக்சினை உருவாக்குகிறோம், இது பயன்படுத்தப்படும் எந்தவொரு கிளாஸிற்கும் timestamp பண்பு மற்றும் getTimestamp மெத்தடைச் சேர்க்கிறது. இது இன்டர்ஃபேஸ் மெர்ஜிங்கை நேரடியாக எளிமையான முறையில் பயன்படுத்தவில்லை என்றாலும், அதிகரிக்கப்பட்ட கிளாஸ்களுக்கான ஒப்பந்தத்தை இன்டர்ஃபேஸ்கள் எவ்வாறு வரையறுக்கின்றன என்பதை இது நிரூபிக்கிறது.

முரண்பாடு தீர்வு

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

முரண்பாடான வகைகள்

இரண்டு இன்டர்ஃபேஸ்கள் ஒரே பெயரில் ஆனால் பொருந்தாத வகைகளுடன் உறுப்பினர்களை அறிவித்தால், கம்பைலர் ஒரு பிழையைக் காட்டும்.

எடுத்துக்காட்டு:

interface A {
  x: number;
}

interface A {
  x: string; // Error: Subsequent property declarations must have the same type.
}

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

interface A {
  x: number | string;
}

interface A {
  x: string | number;
}

இந்த நிலையில், இரண்டு டெக்லரேஷன்களும் இணக்கமாக உள்ளன, ஏனெனில் இரண்டு இன்டர்ஃபேஸ்களிலும் x இன் வகை number | string ஆகும்.

ஃபங்ஷன் ஓவர்லோடுகள்

ஃபங்ஷன் டெக்லரேஷன்களுடன் இன்டர்ஃபேஸ்களை இணைக்கும்போது, டைப்ஸ்கிரிப்ட் ஃபங்ஷன் ஓவர்லோடுகளை ஒரே ஓவர்லோடுகளின் தொகுப்பாக இணைக்கிறது. சரியான ஓவர்லோடைத் தீர்மானிக்க கம்பைல் நேரத்தில் ஓவர்லோடுகளின் வரிசையை கம்பைலர் பயன்படுத்துகிறது.

எடுத்துக்காட்டு:

interface Calculator {
  add(x: number, y: number): number;
}

interface Calculator {
  add(x: string, y: string): string;
}

const calculator: Calculator = {
  add(x: number | string, y: number | string): number | string {
    if (typeof x === 'number' && typeof y === 'number') {
      return x + y;
    } else if (typeof x === 'string' && typeof y === 'string') {
      return x + y;
    } else {
      throw new Error('Invalid arguments');
    }
  },
};

console.log(calculator.add(1, 2)); // Output: 3
console.log(calculator.add("hello", "world")); // Output: hello world

இந்த எடுத்துக்காட்டில், add மெத்தடுக்கு வெவ்வேறு ஃபங்ஷன் ஓவர்லோடுகளுடன் இரண்டு Calculator இன்டர்ஃபேஸ்களை இணைக்கிறோம். டைப்ஸ்கிரிப்ட் இந்த ஓவர்லோடுகளை ஒரே ஓவர்லோடுகளின் தொகுப்பாக இணைக்கிறது, இது எண்கள் அல்லது சரங்களுடன் add மெத்தடை அழைக்க அனுமதிக்கிறது.

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

நீங்கள் இன்டர்ஃபேஸ் நீட்டிப்பை திறம்பட பயன்படுத்துவதை உறுதிப்படுத்த, இந்த சிறந்த நடைமுறைகளைப் பின்பற்றவும்:

மேம்பட்ட சூழ்நிலைகள்

அடிப்படை எடுத்துக்காட்டுகளுக்கு அப்பால், டெக்லரேஷன் மெர்ஜிங் மிகவும் சிக்கலான சூழ்நிலைகளில் சக்திவாய்ந்த திறன்களை வழங்குகிறது.

ஜெனரிக் இன்டர்ஃபேஸ்களை நீட்டித்தல்

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

interface DataStore {
  data: T[];
  add(item: T): void;
}

interface DataStore {
  find(predicate: (item: T) => boolean): T | undefined;
}

class MyDataStore implements DataStore {
  data: T[] = [];

  add(item: T): void {
    this.data.push(item);
  }

  find(predicate: (item: T) => boolean): T | undefined {
    return this.data.find(predicate);
  }
}

const numberStore = new MyDataStore();
numberStore.add(1);
numberStore.add(2);
const foundNumber = numberStore.find(n => n > 1);
console.log(foundNumber); // Output: 2

நிபந்தனைக்குட்பட்ட இன்டர்ஃபேஸ் மெர்ஜிங்

இது ஒரு நேரடி அம்சம் இல்லை என்றாலும், நிபந்தனைக்குட்பட்ட வகைகள் மற்றும் டெக்லரேஷன் மெர்ஜிங்கைப் பயன்படுத்துவதன் மூலம் நிபந்தனைக்குட்பட்ட மெர்ஜிங் விளைவுகளை நீங்கள் அடையலாம்.

interface BaseConfig {
  apiUrl: string;
}

type FeatureFlags = {
  enableNewFeature: boolean;
};

// Conditional interface merging
interface BaseConfig {
  featureFlags?: FeatureFlags;
}

interface EnhancedConfig extends BaseConfig {
  featureFlags: FeatureFlags;
}

function processConfig(config: BaseConfig) {
  console.log(config.apiUrl);
  if (config.featureFlags?.enableNewFeature) {
    console.log("New feature is enabled");
  }
}

const configWithFlags: EnhancedConfig = {
  apiUrl: "https://example.com",
  featureFlags: {
    enableNewFeature: true,
  },
};

processConfig(configWithFlags);

டெக்லரேஷன் மெர்ஜிங்கைப் பயன்படுத்துவதன் நன்மைகள்

டெக்லரேஷன் மெர்ஜிங்கின் வரம்புகள்

முடிவுரை

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