Generic Types

"🧠 āĻœā§‡āύ⧇āϰāĻŋāĻ• āϟāĻžāχāĻĒ (Generic Types): āϟāĻžāχāĻĒ āύāĻŋāϰāĻžāĻĒāĻ¤ā§āϤāĻž āĻŦāϜāĻžā§Ÿ āϰ⧇āϖ⧇ āϕ⧋āĻĄā§‡āϰ āĻĒ⧁āύāσāĻŦā§āϝāĻŦāĻšāĻžāϰāϝ⧋āĻ—ā§āϝāϤāĻž!"

By Tanvir Ahmed

May 7th, 2025

âœī¸ āϏāĻ‚āĻ•ā§āώāĻŋāĻĒā§āϤ āĻŦāĻŋāĻŦāϰāĻŖ

āĻœā§‡āύ⧇āϰāĻŋāĻ• āϟāĻžāχāĻĒ āĻāĻŽāύ āĻāĻ•āϟāĻŋ āĻ•ā§ŒāĻļāϞ āϝāĻž TypeScript-āĻ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āϟāĻžāχāĻĒāϕ⧇ āφāϰ⧋ āĻĢā§āϞ⧇āĻ•ā§āϏāĻŋāĻŦāϞ āĻāĻŦāĻ‚ āĻĒ⧁āύāϰāĻžā§Ÿ āĻŦā§āϝāĻŦāĻšāĻžāϰāϝ⧋āĻ—ā§āϝ āĻ•āϰ⧇ āϤ⧋āϞ⧇āĨ¤ āĻāϟāĻŋ āϟāĻžāχāĻĒāϕ⧇ āĻĄāĻžāχāύāĻžāĻŽāĻŋāĻ•āĻ­āĻžāĻŦ⧇ āϏāĻ‚āĻœā§āĻžāĻžāϝāĻŧāĻŋāϤ āĻ•āϰāĻžāϰ āϏ⧁āϝ⧋āĻ— āĻĻā§‡ā§Ÿ, āϝāĻžāϰ āĻĢāϞ⧇ āĻāĻ•āϟāĻŋ āĻĢāĻžāĻ‚āĻļāύ āĻŦāĻž āĻ•ā§āϞāĻžāϏ āĻāĻ•āĻžāϧāĻŋāĻ• āϟāĻžāχāĻĒ⧇āϰ āϏāĻžāĻĨ⧇ āĻ•āĻžāϜ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āϏāĻšāϜ āĻ­āĻžāώāĻžāϝāĻŧ, āĻœā§‡āύ⧇āϰāĻŋāĻ• āϟāĻžāχāĻĒ⧇āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āφāĻŽāϰāĻž āϟāĻžāχāĻĒ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡ āĻĒ⧁āύāσāĻŦā§āϝāĻŦāĻšāĻžāϰāϝ⧋āĻ—ā§āϝāϤāĻž āφāύāϤ⧇ āĻĒāĻžāϰāĻŋāĨ¤


🔍 āĻœā§‡āύ⧇āϰāĻŋāĻ• āϟāĻžāχāĻĒ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇?

āĻœā§‡āύ⧇āϰāĻŋāĻ• āϟāĻžāχāĻĒ⧇āϰ āϏāĻžāĻšāĻžāĻ¯ā§āϝ⧇ āφāĻĒāύāĻŋ āϟāĻžāχāĻĒ āϏāĻ‚āĻœā§āĻžāĻžāϝāĻŧāĻŋāϤ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ āĻāĻ•āϟāĻŋ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰāĻžāχāϜāĻĄ āϟāĻžāχāĻĒ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ āĻāχ āϟāĻžāχāĻĒāϟāĻŋ āĻŦāĻžāĻ¸ā§āϤāĻŦ⧇ āϚāϞāĻŽāĻžāύ āϕ⧋āĻĄā§‡ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āϟāĻžāχāĻĒ āĻĻāĻŋā§Ÿā§‡ āĻĒā§‚āĻ°ā§āĻŖ āĻšā§ŸāĨ¤

āϧāϰ⧁āύ āφāĻĒāύāĻŋ āĻāĻ•āϟāĻŋ āĻĢāĻžāĻ‚āĻļāύ āϤ⧈āϰāĻŋ āĻ•āϰāϛ⧇āύ āϝāĻž āĻĻ⧁āϟāĻŋ āφāĻ°ā§āϗ⧁āĻŽā§‡āĻ¨ā§āϟ āύ⧇āĻŦ⧇ āĻāĻŦāĻ‚ āϤāĻžāĻĻ⧇āϰ āϝ⧋āĻ—āĻĢāϞ āĻĢāĻŋāϰāĻŋāϝāĻŧ⧇ āĻĻ⧇āĻŦ⧇āĨ¤ āĻ•āĻŋāĻ¨ā§āϤ⧁ āϏ⧇āχ āĻĻ⧁āϟāĻŋ āφāĻ°ā§āϗ⧁āĻŽā§‡āĻ¨ā§āϟ āϝ⧇āϕ⧋āύ⧋ āϟāĻžāχāĻĒ⧇āϰ āĻšāϤ⧇ āĻĒāĻžāϰ⧇, āϝ⧇āĻŽāύ āϏāĻ‚āĻ–ā§āϝāĻž āĻŦāĻž āĻ¸ā§āĻŸā§āϰāĻŋāĻ‚āĨ¤ āĻœā§‡āύ⧇āϰāĻŋāĻ• āϟāĻžāχāĻĒ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϞ⧇ āφāĻĒāύāĻŋ āĻāχ āĻĢāĻžāĻ‚āĻļāύāϟāĻŋ āφāϰāĻ“ āĻĢā§āϞ⧇āĻ•ā§āϏāĻŋāĻŦāϞ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦ⧇āύāĨ¤

✅ āωāĻĻāĻžāĻšāϰāĻŖ:

function identity<T>(arg: T): T {
  return arg;
}
 
let result1 = identity(5);    // result1 āĻāϰ āϟāĻžāχāĻĒ āĻšāĻŦ⧇ number
let result2 = identity("Hello");  // result2 āĻāϰ āϟāĻžāχāĻĒ āĻšāĻŦ⧇ string

Tip: T āĻāĻ•āϟāĻŋ āϟāĻžāχāĻĒ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āϝāĻž āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽ āϰāĻžāύāϟāĻžāχāĻŽā§‡ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āϟāĻžāχāĻĒ⧇ āĻĒā§‚āĻ°ā§āĻŖ āĻšāĻŦ⧇āĨ¤


đŸ› ī¸ āĻ•āĻ–āύ āĻœā§‡āύ⧇āϰāĻŋāĻ• āϟāĻžāχāĻĒ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŦ⧇āύ?

âœ”ī¸ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ āϝāĻ–āύ:

  • āĻāĻ•āϟāĻŋ āĻĢāĻžāĻ‚āĻļāύ āĻŦāĻž āĻ•ā§āϞāĻžāϏ āϝ⧇āϕ⧋āύ⧋ āϟāĻžāχāĻĒ⧇āϰ āϏāĻžāĻĨ⧇ āĻ•āĻžāϜ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤
  • āφāĻĒāύāĻŋ āϟāĻžāχāĻĒ⧇āϰ āϧāϰāύ āϜāĻžāύ⧇āύ āύāĻž, āϤāĻŦ⧇ āύāĻŋāĻļā§āϚāĻŋāϤ āϝ⧇ āĻāĻ•āχ āϧāϰāύ⧇āϰ āĻĄā§‡āϟāĻžāϰ āϏāĻžāĻĨ⧇ āĻ•āĻžāϜ āĻ•āϰāĻŦ⧇āĻ¨ã€‚
  • āĻĒ⧁āύāσāĻŦā§āϝāĻŦāĻšāĻžāϰāϝ⧋āĻ—ā§āϝ āϕ⧋āĻĄ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āϚāĻžāύāĨ¤

❌ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŦ⧇āύ āύāĻž āϝāĻ–āύ:

  • āĻāĻ•āϟāĻŋ āĻĢāĻžāĻ‚āĻļāύ āĻŦāĻž āĻ•ā§āϞāĻžāϏ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āϟāĻžāχāĻĒ⧇āϰ āϏāĻžāĻĨ⧇ āĻ•āĻžāϜ āĻ•āϰāϤ⧇ āĻĒāĻžāĻ°ā§‡ã€‚
  • āϕ⧋āĻĄā§‡ āĻ…āĻ¤ā§āϝāϧāĻŋāĻ• āϜāϟāĻŋāϞāϤāĻž āφāύāϤ⧇ āϚāĻžāĻšā§āϛ⧇āύ, āϝ⧇āĻ–āĻžāύ⧇ āĻœā§‡āύ⧇āϰāĻŋāĻ• āϟāĻžāχāĻĒ⧇āϰ āĻĒā§āĻ°ā§Ÿā§‹āϜāύ āύ⧇āχāĨ¤

đŸ§Ē āĻĒā§āĻ°ā§āϝāĻžāĻ•āϟāĻŋāϏ āĻĒā§āϰāĻŦāϞ⧇āĻŽ

āĻĒā§āϰāĻļā§āύ:

āφāĻĒāύāĻžāϰ āĻ•āĻžāϜ:

  1. āĻāĻ•āϟāĻŋ āĻœā§‡āύ⧇āϰāĻŋāĻ• āĻĢāĻžāĻ‚āĻļāύ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ āϝāĻž āĻĻ⧁āϟāĻŋ āĻ­ā§āϝāĻžāϞ⧁āϰ āϤ⧁āϞāύāĻž āĻ•āϰāĻŦ⧇ āĻāĻŦāĻ‚ āϏ⧇āϗ⧁āϞāĻŋ āϏāĻŽāĻžāύ āĻ•āĻŋāύāĻž āϤāĻž āϜāĻžāύāĻžāĻŦ⧇āĨ¤
  2. āĻāχ āĻĢāĻžāĻ‚āĻļāύāϟāĻŋ āϏāĻ‚āĻ–ā§āϝāĻžāϰ āĻĒāĻžāĻļāĻžāĻĒāĻžāĻļāĻŋ āĻ¸ā§āĻŸā§āϰāĻŋāĻ‚āĻ“ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

✅ āϏāĻŽāĻžāϧāĻžāύ:

function isEqual<T>(a: T, b: T): boolean {
  return a === b;
}
 
let result1 = isEqual(10, 10);     // true
let result2 = isEqual("hello", "world");  // false

đŸ’ŧ āχāĻ¨ā§āϟāĻžāϰāĻ­āĻŋāω āĻĒā§āϰāĻļā§āύ āĻ“ āωāĻ¤ā§āϤāϰ

ā§§. āĻœā§‡āύ⧇āϰāĻŋāĻ• āϟāĻžāχāĻĒ āϕ⧀?

āωāĻ¤ā§āϤāϰ: āĻœā§‡āύ⧇āϰāĻŋāĻ• āϟāĻžāχāĻĒ āĻšāϞ⧋ āĻāĻ•āϟāĻŋ āĻ•ā§ŒāĻļāϞ āϝāĻž āϟāĻžāχāĻĒ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡ āĻĢā§āϞ⧇āĻ•ā§āϏāĻŋāĻŦāĻŋāϞāĻŋāϟāĻŋ āφāύ⧇ āĻāĻŦāĻ‚ āϕ⧋āĻĄāϕ⧇ āĻĒ⧁āύāσāĻŦā§āϝāĻŦāĻšāĻžāϰāϝ⧋āĻ—ā§āϝ āĻ•āϰ⧇ āϤ⧋āϞ⧇āĨ¤

⧍. āĻœā§‡āύ⧇āϰāĻŋāĻ• āϟāĻžāχāĻĒ āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŦ⧇āύ?

āωāĻ¤ā§āϤāϰ: āĻœā§‡āύ⧇āϰāĻŋāĻ• āϟāĻžāχāĻĒ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻšāϞ⧇ āĻāĻ•āϟāĻŋ āϟāĻžāχāĻĒ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻšā§Ÿ, āϝ⧇āϟāĻŋ āĻĢāĻžāĻ‚āĻļāύ āĻŦāĻž āĻ•ā§āϞāĻžāϏ⧇āϰ āĻ­āĻŋāϤāϰ⧇ āϝ⧇ āϕ⧋āύ āϟāĻžāχāĻĒ⧇āϰ āϜāĻ¨ā§āϝ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻšāĻŦ⧇āĨ¤

ā§Š. āĻœā§‡āύ⧇āϰāĻŋāĻ• āϟāĻžāχāĻĒ⧇āϰ āϏ⧁āĻŦāĻŋāϧāĻž āϕ⧀?

āωāĻ¤ā§āϤāϰ: āĻāϟāĻŋ āϕ⧋āĻĄā§‡āϰ āĻĒ⧁āύāσāĻŦā§āϝāĻŦāĻšāĻžāϰāϝ⧋āĻ—ā§āϝāϤāĻž āĻŦ⧃āĻĻā§āϧāĻŋ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āϟāĻžāχāĻĒ āύāĻŋāϰāĻžāĻĒāĻ¤ā§āϤāĻž āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰ⧇, āϝ⧇ āĻ•āĻžāϰāϪ⧇ āϕ⧋āĻĄā§‡āϰ āĻŦāĻžāĻ— āĻ•āĻŽ āĻšā§ŸāĨ¤


🔚 āωāĻĒāϏāĻ‚āĻšāĻžāϰ

āĻœā§‡āύ⧇āϰāĻŋāĻ• āϟāĻžāχāĻĒ TypeScript-āĻ āĻāĻ•āϟāĻŋ āĻļāĻ•ā§āϤāĻŋāĻļāĻžāϞ⧀ āĻ•ā§ŒāĻļāϞ āϝāĻž āϕ⧋āĻĄā§‡āϰ āĻĒ⧁āύāσāĻŦā§āϝāĻŦāĻšāĻžāϰāϝ⧋āĻ—ā§āϝāϤāĻž āĻāĻŦāĻ‚ āĻĢā§āϞ⧇āĻ•ā§āϏāĻŋāĻŦāĻŋāϞāĻŋāϟāĻŋ āĻŦ⧃āĻĻā§āϧāĻŋ āĻ•āϰāϤ⧇ āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻ•āϰ⧇āĨ¤ āĻāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϞ⧇ āϟāĻžāχāĻĒ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡ āύāĻŋāϰāĻžāĻĒāĻ¤ā§āϤāĻž āφāϏ⧇ āĻāĻŦāĻ‚ āφāĻĒāύāĻžāϰ āϕ⧋āĻĄā§‡āϰ āĻŽāĻžāύ āĻŦ⧃āĻĻā§āϧāĻŋ āĻĒāĻžā§ŸāĨ¤