Interface

"📘 āϟāĻžāχāĻĒāĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āχāĻ¨ā§āϟāĻžāϰāĻĢ⧇āϏ (Interface): āĻ—āĻ āύ āĻ•āϰ⧁āύ āφāĻĒāύāĻžāϰ āϟāĻžāχāĻĒāϕ⧇"

By Tanvir Ahmed

May 7th, 2025

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

āχāĻ¨ā§āϟāĻžāϰāĻĢ⧇āϏ āĻšāϞ⧋ āϟāĻžāχāĻĒāĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āĻŸā§‡āϰ āĻāĻ•āϟāĻŋ āĻļāĻ•ā§āϤāĻŋāĻļāĻžāϞ⧀ āĻĢāĻŋāϚāĻžāϰ, āϝāĻž āĻĻāĻŋā§Ÿā§‡ āφāĻĒāύāĻŋ āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸā§‡āϰ āĻ—āĻ āύ (structure) āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤

āĻ…āĻ°ā§āĻĨāĻžā§Ž, āϕ⧀ āϕ⧀ āĻĒā§āϰāĻĒāĻžāĻ°ā§āϟāĻŋ āĻĨāĻžāĻ•āĻŦ⧇, āϏ⧇āϗ⧁āϞ⧋āϰ āϟāĻžāχāĻĒ āϕ⧀ āĻšāĻŦ⧇ — āϏāĻŦāĻ•āĻŋāϛ⧁ āφāϗ⧇ āĻĨ⧇āϕ⧇āχ āĻ āĻŋāĻ• āĻ•āϰ⧇ āĻĻ⧇āĻ“ā§ŸāĻž āϝāĻžā§ŸāĨ¤

āĻāχ āĻĢāĻŋāϚāĻžāϰ āϕ⧋āĻĄāϕ⧇ āφāϰāĻ“ āϏ⧁āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ“ āύāĻŋāĻ°ā§āĻ­āϰāϝ⧋āĻ—ā§āϝ āĻ•āϰ⧇ āϤ⧋āϞ⧇āĨ¤


🔍 āχāĻ¨ā§āϟāĻžāϰāĻĢ⧇āϏ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇?

āχāĻ¨ā§āϟāĻžāϰāĻĢ⧇āϏ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āφāĻĒāύāĻŋ āĻŦāϞāϤ⧇ āĻĒāĻžāϰ⧇āύ,
“āφāĻŽāĻŋ āĻāĻŽāύ āĻāĻ•āϟāĻŋ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āϚāĻžāχ āϝāĻžāϤ⧇ name āĻšāĻŦ⧇ string āĻāĻŦāĻ‚ age āĻšāĻŦ⧇ numberāĨ¤â€

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

interface Person {
  name: string;
  age: number;
}
 
let user: Person = {
  name: "Rahim",
  age: 30
};

āĻāĻ–āĻžāύ⧇ Person āχāĻ¨ā§āϟāĻžāϰāĻĢ⧇āϏ āĻŦāϞ⧇ āĻĻāĻŋāĻšā§āϛ⧇, user āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸā§‡ āĻ…āĻŦāĻļā§āϝāχ name āĻ“ age āĻĨāĻžāĻ•āϤ⧇ āĻšāĻŦ⧇āĨ¤


đŸ› ī¸ āĻ•āĻ–āύ āχāĻ¨ā§āϟāĻžāϰāĻĢ⧇āϏ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŦ⧇āύ?

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

  • āφāĻĒāύāĻŋ āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸā§‡āϰ āĻ—āĻ āύ āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰāϤ⧇ āϚāĻžāύāĨ¤
  • āĻ…āύ⧇āĻ•āϗ⧁āϞ⧋ āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸā§‡ āĻāĻ•āχ āĻ—āĻ āύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻšāĻŦ⧇āĨ¤
  • āĻ•ā§āϞāĻžāϏ āĻŦāĻž āĻĢāĻžāĻ‚āĻļāύ⧇āϰ āχāύāĻĒ⧁āϟ āĻŦāĻž āϰāĻŋāϟāĻžāĻ°ā§āύ āϟāĻžāχāĻĒ āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰāϤ⧇ āϚāĻžāύāĨ¤

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

  • āφāĻĒāύāĻžāϰ āϟāĻžāχāĻĒ āĻāĻ•āĻžāϧāĻŋāĻ• āĻĢāĻ°ā§āĻŽ āύāĻŋāϤ⧇ āĻĒāĻžāϰ⧇ (union type āĻšāϞ⧇ āωāĻĒāϝ⧁āĻ•ā§āϤ āύ⧟)āĨ¤
  • āφāĻĒāύāĻžāϰ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ flexible āĻšāĻ“ā§ŸāĻž āĻĻāϰāĻ•āĻžāϰ (Record<string, any> āϟāĻžāχāĻĒ⧇)āĨ¤

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

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

āĻāĻ•āϟāĻŋ āχāĻ¨ā§āϟāĻžāϰāĻĢ⧇āϏ āĻŦāĻžāύāĻžāύ āϝāĻžāϰ āύāĻžāĻŽ Student, āϝ⧇āĻ–āĻžāύ⧇ āĻĨāĻžāĻ•āĻŦ⧇:

  • name: string
  • roll: number
  • isPassed: boolean

āϤāĻžāϰāĻĒāϰ āĻāĻ•āϟāĻŋ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āĻŦāĻžāύāĻžāύ āϝāĻž āĻāχ āχāĻ¨ā§āϟāĻžāϰāĻĢ⧇āϏ āĻŽā§‡āύ⧇ āϚāϞ⧇ āĻāĻŦāĻ‚ āĻĒā§āϰāĻŋāĻ¨ā§āϟ āĻ•āϰ⧁āύ name āĻ“ isPassed āĻŽāĻžāύāĨ¤

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

interface Student {
  name: string;
  roll: number;
  isPassed: boolean;
}
 
let s1: Student = {
  name: "Sumaiya",
  roll: 102,
  isPassed: true
};
 
console.log(s1.name);      // Sumaiya
console.log(s1.isPassed);  // true

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

ā§§. āχāĻ¨ā§āϟāĻžāϰāĻĢ⧇āϏ āϕ⧀?

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


⧍. āχāĻ¨ā§āϟāĻžāϰāĻĢ⧇āϏ āĻāĻŦāĻ‚ āϟāĻžāχāĻĒ (type alias) āĻāϰ āĻŽāĻ§ā§āϝ⧇ āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āϝ āϕ⧀?

āωāĻ¤ā§āϤāϰ:

  • interface āϕ⧇āĻŦāϞ āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸā§‡āϰ āĻ—āĻ āύ āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤
  • type āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āĻ›āĻžā§œāĻžāĻ“ union, intersection āχāĻ¤ā§āϝāĻžāĻĻāĻŋ āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰāĻž āϝāĻžā§ŸāĨ¤
  • āχāĻ¨ā§āϟāĻžāϰāĻĢ⧇āϏ⧇ extend āĻ•āϰāĻž āϏāĻšāϜ, āϟāĻžāχāĻĒ⧇ āύ⧟āĨ¤

ā§Š. āχāĻ¨ā§āϟāĻžāϰāĻĢ⧇āϏ āĻ•āĻŋ extend āĻ•āϰāĻž āϝāĻžā§Ÿ?

āωāĻ¤ā§āϤāϰ: āĻšā§āϝāĻžāρ, āĻāĻ•āϟāĻŋ āχāĻ¨ā§āϟāĻžāϰāĻĢ⧇āϏ āĻ…āĻ¨ā§āϝ āχāĻ¨ā§āϟāĻžāϰāĻĢ⧇āϏāϕ⧇ extend āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

interface Person {
  name: string;
}
 
interface Employee extends Person {
  salary: number;
}
 
let e: Employee = {
  name: "Tania",
  salary: 50000
};

ā§Ē. āχāĻ¨ā§āϟāĻžāϰāĻĢ⧇āϏ⧇ āϐāĻšā§āĻ›āĻŋāĻ• (optional) āĻĒā§āϰāĻĒāĻžāĻ°ā§āϟāĻŋ āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰāĻŦ⧇āύ?

āωāĻ¤ā§āϤāϰ: āĻĒā§āϰāĻĒāĻžāĻ°ā§āϟāĻŋāϰ āύāĻžāĻŽā§‡āϰ āĻĒāĻžāĻļ⧇ ? āĻĻāĻŋā§Ÿā§‡ āϐāĻšā§āĻ›āĻŋāĻ• āĻ•āϰāĻž āϝāĻžā§ŸāĨ¤

interface User {
  name: string;
  age?: number;
}

ā§Ģ. āĻĢāĻžāĻ‚āĻļāύ⧇āϰ āϜāĻ¨ā§āϝ āχāĻ¨ā§āϟāĻžāϰāĻĢ⧇āϏ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϝāĻžā§Ÿ?

āωāĻ¤ā§āϤāϰ: āĻšā§āϝāĻžāρ, āĻĢāĻžāĻ‚āĻļāύ⧇āϰ āϟāĻžāχāĻĒ āϏāĻ‚āĻœā§āĻžāĻžā§Ÿāύ⧇āϰ āϜāĻ¨ā§āϝ āχāĻ¨ā§āϟāĻžāϰāĻĢ⧇āϏ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϝāĻžā§ŸāĨ¤

interface AddFn {
  (a: number, b: number): number;
}
 
let add: AddFn = (x, y) => x + y;

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

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

āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻŦ⧜ āĻĒā§āϰāĻœā§‡āĻ•ā§āĻŸā§‡ āĻ•āĻžāϜ āĻ•āϰ⧇āύ, āχāĻ¨ā§āϟāĻžāϰāĻĢ⧇āϏ āĻ›āĻžā§œāĻž āĻāϗ⧁āύ⧋ āĻĒā§āϰāĻžā§Ÿ āĻ…āϏāĻŽā§āĻ­āĻŦāĨ¤
āϤāĻžāχ āχāĻ¨ā§āϟāĻžāϰāĻĢ⧇āϏ⧇āϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ­āĻžāϞ⧋āĻ­āĻžāĻŦ⧇ āĻ†ā§ŸāĻ¤ā§āϤ āĻ•āϰāĻž āĻĒā§āϰāϤāĻŋāϟāĻŋ TypeScript āĻĄā§‡āϭ⧇āϞāĻĒāĻžāϰ⧇āϰ āϜāĻ¨ā§āϝ āĻ…āĻĒāϰāĻŋāĻšāĻžāĻ°ā§āϝāĨ¤