Type Assertion

"🧠 āϟāĻžāχāĻĒ āĻ…ā§āϝāĻžāϏāĻžāϰāĻļāύ (Type Assertion): āĻ•āĻŽā§āĻĒāĻžāχāϞāĻžāϰāϕ⧇ āĻŦāĻŋāĻļā§āĻŦāĻžāϏ āύāĻž, āĻĻāĻŋāĻ•āύāĻŋāĻ°ā§āĻĻ⧇āĻļ āĻĻāĻŋāύ!"

By Tanvir Ahmed

May 7th, 2025

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

āϟāĻžāχāĻĒ āĻ…ā§āϝāĻžāϏāĻžāϰāĻļāύ āĻāĻŽāύ āĻāĻ•āϟāĻŋ āĻ•ā§ŒāĻļāϞ, āϝ⧇āĻ–āĻžāύ⧇ āφāĻĒāύāĻŋ āĻ•āĻŽā§āĻĒāĻžāχāϞāĻžāϰāϕ⧇ āύāĻŋāϜ āĻšāĻžāϤ⧇ āĻŦāϞ⧇ āĻĻ⧇āύ:

“āĻāχ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞāϟāĻŋ āφāϏāϞ⧇ āϕ⧋āύ āϟāĻžāχāĻĒ⧇āϰ, āφāĻŽāĻŋ āϜāĻžāύāĻŋāĨ¤ āϤ⧁āĻŽāĻŋ āϏ⧇āϟāĻžāχ āϧāϰ⧇ āύāĻžāĻ“āĨ¤â€

āĻāϟāĻŋ TypeScript-āϏāĻš āĻ•āĻŋāϛ⧁ āĻ¸ā§āĻŸā§āϝāĻžāϟāĻŋāĻ•āĻžāϞāĻŋ āϟāĻžāχāĻĒāĻĄ āĻ­āĻžāώāĻžā§Ÿ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻšā§ŸāĨ¤ āĻāϟāĻŋ āĻĄā§‡āϭ⧇āϞāĻĒāĻžāϰāϕ⧇ āφāϰāĻ“ āĻŦ⧇āĻļāĻŋ āύāĻŋ⧟āĻ¨ā§āĻ¤ā§āϰāĻŖ āĻĻā§‡ā§Ÿ, āϤāĻŦ⧇ āϭ⧁āϞāĻ­āĻžāĻŦ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϞ⧇ āϏāĻŽāĻ¸ā§āϝāĻž āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤


🔍 āϟāĻžāχāĻĒ āĻ…ā§āϝāĻžāϏāĻžāϰāĻļāύ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇?

āϧāϰ⧁āύ āφāĻĒāύāĻŋ āĻāĻ•āϟāĻŋ API āĻĨ⧇āϕ⧇ āĻāĻ•āϟāĻŋ āĻĄā§‡āϟāĻž āĻĒāĻžāĻšā§āϛ⧇āύ āϝāĻžāϰ āϟāĻžāχāĻĒ āĻ āĻŋāĻ•āĻ­āĻžāĻŦ⧇ āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰāĻž āϝāĻžāĻšā§āϛ⧇ āύāĻžāĨ¤ āĻ•āĻŽā§āĻĒāĻžāχāϞāĻžāϰ āϜāĻžāύ⧇ āύāĻž āϏ⧇āϟāĻž āϕ⧀ — āĻ•āĻŋāĻ¨ā§āϤ⧁ āφāĻĒāύāĻŋ āϜāĻžāύ⧇āύāĨ¤ āϤāĻ–āύ āφāĻĒāύāĻŋ āϟāĻžāχāĻĒ āĻ…ā§āϝāĻžāϏāĻžāϰāĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤

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

let data: any = "Hello TypeScript";
let length = (data as string).length;
console.log(length); // 16

Tip: JSX (React)-āĻ <string> āĻ¸ā§āϟāĻžāχāϞ āύāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ as string āĻ¸ā§āϟāĻžāχāϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύāĨ¤


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

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

  • āφāĻĒāύāĻŋ āϜāĻžāύ⧇āύ āĻāĻ•āϟāĻŋ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ āϕ⧋āύ āϟāĻžāχāĻĒ⧇āϰ āĻšāĻŦ⧇āĨ¤
  • āφāĻĒāύāĻŋ āϕ⧋āύ⧋ API āĻĨ⧇āϕ⧇ any āĻŦāĻž unknown āϟāĻžāχāĻĒ⧇āϰ āĻĄā§‡āϟāĻž āĻĒāĻžāĻšā§āϛ⧇āύāĨ¤
  • āĻ•āĻŽā§āĻĒāĻžāχāϞāĻžāϰ āϝ⧇āĻ–āĻžāύ⧇ āĻ•āύāĻĢāĻŋāωāϜāĻĄ, āϏ⧇āĻ–āĻžāύ⧇ āφāĻĒāύāĻŋ āύāĻŋāĻœā§‡ āϟāĻžāχāĻĒ āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰāϤ⧇ āϚāĻžāύāĨ¤

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

  • āφāĻĒāύāĻŋ āĻĄā§‡āϟāĻžāϰ āϟāĻžāχāĻĒ āύāĻŋāĻļā§āϚāĻŋāϤ āύāύāĨ¤
  • āĻĄā§‡āϟāĻž runtime-āĻ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āϰāĻ•āĻŽ āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤
  • āϟāĻžāχāĻĒ āĻ…ā§āϝāĻžāϏāĻžāϰāĻļāύ āĻĻāĻŋā§Ÿā§‡ āϭ⧁āϞ āϟāĻžāχāĻĒ āϧāϰāϞ⧇ āϕ⧋āĻĄ āϭ⧇āϙ⧇ āĻĒ⧜āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

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

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

āφāĻĒāύāĻŋ āύāĻŋāĻšā§‡āϰ JSON āĻĄā§‡āϟāĻž āĻĒāĻžāĻšā§āϛ⧇āύ:

let response: any = '{"name": "Anika", "age": 22}';

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

  1. JSON āĻĒāĻžāĻ°ā§āϏ āĻ•āϰ⧁āύāĨ¤
  2. āϟāĻžāχāĻĒ āĻ…ā§āϝāĻžāϏāĻžāϰāĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ name āĻāĻŦāĻ‚ age āĻŦ⧇āϰ āĻ•āϰ⧁āύāĨ¤
  3. name āϕ⧇ āĻŦ⧜ āĻšāĻžāϤ⧇āϰ āĻ…āĻ•ā§āώāϰ⧇ āĻĒā§āϰāĻŋāĻ¨ā§āϟ āĻ•āϰ⧁āύāĨ¤
  4. age āĻāϰ āϏāĻžāĻĨ⧇ ā§Ž āϝ⧋āĻ— āĻ•āϰ⧇ āĻĒā§āϰāĻŋāĻ¨ā§āϟ āĻ•āϰ⧁āύāĨ¤

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

let response: any = '{"name": "Anika", "age": 22}';
 
let parsed = JSON.parse(response);
let user = parsed as { name: string, age: number };
 
console.log(user.name.toUpperCase()); // ANIKA
console.log(user.age + 8);            // 30

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

ā§§. āϟāĻžāχāĻĒ āĻ…ā§āϝāĻžāϏāĻžāϰāĻļāύ āϕ⧀?

āωāĻ¤ā§āϤāϰ: āϟāĻžāχāĻĒ āĻ…ā§āϝāĻžāϏāĻžāϰāĻļāύ āĻšāϞ⧋ āĻāĻ•āϟāĻŋ āωāĻĒāĻžā§Ÿ āϝ⧇āĻ–āĻžāύ⧇ āφāĻĒāύāĻŋ āĻ•āĻŽā§āĻĒāĻžāχāϞāĻžāϰāϕ⧇ āύāĻŋāĻ°ā§āĻĻ⧇āĻļ āĻĻ⧇āύ āϕ⧋āύ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ āϕ⧀ āϟāĻžāχāĻĒ⧇āϰ āĻšāĻŦ⧇āĨ¤ āĻāϟāĻŋ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ compile time-āĻ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻšā§ŸāĨ¤


⧍. āϟāĻžāχāĻĒ āĻ…ā§āϝāĻžāϏāĻžāϰāĻļāύ āφāϰ āϟāĻžāχāĻĒ āĻ•āĻžāĻ¸ā§āϟāĻŋāĻ‚ āĻ•āĻŋ āĻāĻ•āχ āϜāĻŋāύāĻŋāϏ?

āωāĻ¤ā§āϤāϰ: āύāĻž, āϟāĻžāχāĻĒ āĻ…ā§āϝāĻžāϏāĻžāϰāĻļāύ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ TypeScript-āĻāϰ compile time āĻĒāĻ°ā§āϝāĻžā§Ÿā§‡ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻšā§ŸāĨ¤ āϟāĻžāχāĻĒ āĻ•āĻžāĻ¸ā§āϟāĻŋāĻ‚ runtime-āĻ āφāϏāϞ āϟāĻžāχāĻĒ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧇ (āϝ⧇āĻŽāύ C āĻŦāĻž Java āϤ⧇ āĻšā§Ÿ)āĨ¤


ā§Š. as āĻāĻŦāĻ‚ <type> — āϕ⧋āύ āĻ¸ā§āϟāĻžāχāϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŦ⧇āύ?

āωāĻ¤ā§āϤāϰ: as āĻ¸ā§āϟāĻžāχāϞ āϏāĻŦāĻšā§‡ā§Ÿā§‡ āύāĻŋāϰāĻžāĻĒāĻĻ āĻāĻŦāĻ‚ āφāϧ⧁āύāĻŋāĻ•āĨ¤ JSX (React) āϕ⧋āĻĄā§‡ <type> āĻ¸ā§āϟāĻžāχāϞ āĻ•āύāĻĢā§āϞāĻŋāĻ•ā§āϟ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇, āϤāĻžāχ as āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻžāχ āωāĻ¤ā§āϤāĻŽāĨ¤


ā§Ē. āϭ⧁āϞ āϟāĻžāχāĻĒ āĻ…ā§āϝāĻžāϏāĻžāĻ°ā§āϟ āĻ•āϰāϞ⧇ āϕ⧀ āĻšāϤ⧇ āĻĒāĻžāϰ⧇?

āωāĻ¤ā§āϤāϰ: āĻ•āĻŽā§āĻĒāĻžāχāϞāĻžāϰ āϕ⧋āύ⧋ āĻāϰāϰ āύāĻž āĻĻ⧇āĻ–āĻžāϞ⧇āĻ“ āϕ⧋āĻĄ runtime-āĻ āϭ⧇āϙ⧇ āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āϤāĻžāχ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻžāϰ āϏāĻŽā§Ÿ āϏāĻžāĻŦāϧāĻžāύāϤāĻž āϜāϰ⧁āϰāĻŋāĨ¤

let value: any = 123;
let str = value as string;
console.log(str.toUpperCase()); // ❌ Error at runtime

ā§Ģ. unknown āϟāĻžāχāĻĒ⧇ āĻ…ā§āϝāĻžāϏāĻžāϰāĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ⧇āϰ āϏ⧁āĻŦāĻŋāϧāĻž āϕ⧀?

āωāĻ¤ā§āϤāϰ: unknown āϟāĻžāχāĻĒ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϞ⧇ āϟāĻžāχāĻĒ āĻšā§‡āĻ• āύāĻž āĻ•āϰ⧇ āϏāϰāĻžāϏāϰāĻŋ āϕ⧋āύ⧋ āĻ…āĻĒāĻžāϰ⧇āĻļāύ āĻ•āϰāĻž āϝāĻžā§Ÿ āύāĻž, āϤāĻžāχ āĻāϟāĻŋ any āĻāϰ āĻšā§‡ā§Ÿā§‡ āύāĻŋāϰāĻžāĻĒāĻĻāĨ¤ āϟāĻžāχāĻĒ āĻ…ā§āϝāĻžāϏāĻžāϰāĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āύāĻŋāĻļā§āϚāĻŋāϤāĻ­āĻžāĻŦ⧇ āϟāĻžāχāĻĒ āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰāĻž āϝāĻžā§ŸāĨ¤

let input: unknown = "hello";
let str = input as string;
console.log(str.toUpperCase()); // HELLO

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

āϟāĻžāχāĻĒ āĻ…ā§āϝāĻžāϏāĻžāϰāĻļāύ āĻĄā§‡āϭ⧇āϞāĻĒāĻžāϰāĻĻ⧇āϰ āĻāĻŽāύ āĻāĻ•āϟāĻŋ āĻļāĻ•ā§āϤāĻŋāĻļāĻžāϞ⧀ āϟ⧁āϞ, āϝāĻž āĻĻāĻŋā§Ÿā§‡ āϤāĻžāϰāĻž āĻ•āĻŽā§āĻĒāĻžāχāϞāĻžāϰāϕ⧇ āĻŦ⧁āĻāĻŋā§Ÿā§‡ āĻĻāĻŋāϤ⧇ āĻĒāĻžāϰ⧇āύ — "āφāĻŽāĻŋ āϜāĻžāύāĻŋ āĻāχ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞāϟāĻŋ āϕ⧋āύ āϟāĻžāχāĻĒ⧇āϰāĨ¤"

āϤāĻŦ⧇ āĻāϟāĻŋ āĻ–ā§‹āρāϜ āύāĻž āύāĻŋā§Ÿā§‡ āύāĻž āĻŦ⧁āĻā§‡ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϞ⧇ āĻŦāĻŋāĻĒāĻĻāĻ“ āĻĄā§‡āϕ⧇ āφāύāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤
āϤāĻžāχ āϏāĻ°ā§āĻŦāĻĻāĻž āύāĻŋāĻļā§āϚāĻŋāϤ āĻšā§Ÿā§‡, āύāĻŋāϰāĻžāĻĒāĻĻāĻ­āĻžāĻŦ⧇ āϟāĻžāχāĻĒ āĻ…ā§āϝāĻžāϏāĻžāϰāĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύāĨ¤