πŸ“˜ νƒ€μž…μŠ€ν¬λ¦½νŠΈ κ°œλ… 정리04

seoyoon_leeΒ·2026λ…„ 3μ›” 29일

TypeScript

λͺ©λ‘ 보기
11/21
post-thumbnail

πŸ“Œ νƒ€μž… 단언(Type Assertion)

βœ… 1. νƒ€μž… λ‹¨μ–Έμ΄λž€?

πŸ‘‰ "이 값은 이 νƒ€μž…μ΄μ•Ό!" 라고 TypeScriptμ—κ²Œ μ•Œλ €μ£ΌλŠ” 것

μ‹€μ œλ‘œ 값이 λ°”λ€ŒλŠ” 게 μ•„λ‹˜ ❌
컴파일러만 μ†μ΄λŠ” μš©λ„ βœ”οΈ

let value = {} as Person;

πŸ‘‰ β€œμ΄κ±΄ Person νƒ€μž…μ΄μ•Ό!” 라고 믿게 λ§Œλ“œλŠ” 것

βœ… 2. μ™œ μ‚¬μš©ν•˜λŠ”κ°€?

πŸ“Œ 문제 상황

let person = {};
person.name = "army"; // ❌ μ—λŸ¬

πŸ‘‰ 이유: {} 빈 객체둜 좔둠됨

πŸ“Œ ν•΄κ²° 방법 (νƒ€μž… 단언)

let person = {} as Person;
person.name = "army"; // ⭕️
person.age = 2;

πŸ‘‰ μ²˜μŒλΆ€ν„° Person νƒ€μž…μ΄λΌκ³  μ•Œλ €μ€Œ

βœ… 3. 초과 ν”„λ‘œνΌν‹° 문제 ν•΄κ²°

type Cat = {
  name: string;
  color: string;
};
let cat = {
  name: "army",
  color: "white",
  breed: "μ½”λ¦¬μ•ˆ 숏"
} as Cat;

πŸ‘‰ μ›λž˜λŠ” breed λ•Œλ¬Έμ— μ—λŸ¬ ❌
πŸ‘‰ as Cat ν•˜λ©΄ 검사 μ•ˆ 함 βœ”οΈ

⚠️ 주의:
πŸ‘‰ λ„ˆλ¬΄ 많이 μ“°λ©΄ μœ„ν—˜ν•¨ (νƒ€μž… 검사 무λ ₯화됨)

βœ… 4. νƒ€μž… 단언 κ·œμΉ™ ⭐️ (μ€‘μš”)

πŸ‘‰ 아무 νƒ€μž…μ΄λ‚˜ 막 λ°”κΏ€ 수 μ—†μŒ!

βœ”οΈ κ°€λŠ₯ 쑰건

A β†’ B λ‹¨μ–Έν•˜λ €λ©΄

πŸ‘‰ λ‘˜ 쀑 ν•˜λ‚˜λŠ” λ§Œμ‘±ν•΄μ•Ό 함

  1. Aκ°€ B의 μŠˆνΌνƒ€μž…
  2. Aκ°€ B의 μ„œλΈŒνƒ€μž…

πŸ“Œ μ˜ˆμ‹œ

let num1 = 10 as never;    // ⭕️
let num2 = 10 as unknown;  // ⭕️
// let num3 = 10 as string; ❌

πŸ“Œ 꼼수 (닀쀑 단언)

let num3 = 10 as unknown as string; // ⭕️

πŸ‘‰ μœ„ν—˜ν•˜μ§€λ§Œ κ°€λŠ₯
⚠️ μ‹€λ¬΄μ—μ„œλŠ” μ§„μ§œ ν•„μš”ν•  λ•Œλ§Œ!

βœ… 5. const 단언

πŸ‘‰ 값을 더 "κ³ μ •" μ‹œν‚΄

let num = 10 as const;

πŸ‘‰ νƒ€μž…: 10 (λ¦¬ν„°λŸ΄ νƒ€μž…)

πŸ“Œ κ°μ²΄μ—μ„œ μ€‘μš”!

let dog = {
  name: "hani",
  color: "white"
} as const;

πŸ‘‰ κ²°κ³Ό:
readonly μžλ™ 적용됨
κ°’ μˆ˜μ • λΆˆκ°€ ❌

dog.name = "tom"; // ❌ μ—λŸ¬

βœ… 6. Non-null 단언 (!)

πŸ‘‰ "이 κ°’ μ ˆλŒ€ null/undefined μ•„λ‹˜!" 이라고 ν™•μ‹ ν•  λ•Œ

πŸ“Œ 문제

type Post = {
  title: string;
  author?: string;
};


const len: number = post.author?.length; // ❌

πŸ‘‰ undefined κ°€λŠ₯μ„± λ•Œλ¬Έ

πŸ“Œ ν•΄κ²°

const len: number = post.author!.length;

πŸ‘‰ "author 무쑰건 μžˆμ–΄!" 라고 μ„ μ–Έ

⚠️ 주의
μ‹€μ œλ‘œ μ—†μœΌλ©΄ λŸ°νƒ€μž„ μ—λŸ¬ 터짐 πŸ’₯

🚨 κΌ­ 쑰심해야 ν•  것

  1. νƒ€μž… 단언 λ‚¨λ°œ ❌
    πŸ‘‰ νƒ€μž…μŠ€ν¬λ¦½νŠΈ μ“°λŠ” 의미 없어짐

  2. Non-null (!) λ‚¨μš© ❌
    πŸ‘‰ μ§„μ§œ μžˆμ„ λ•Œλ§Œ 써야 함

  3. as const μ˜€ν•΄ ❌
    πŸ‘‰ "μƒμˆ˜μ²˜λŸΌ λ§Œλ“ λ‹€" = κ°’ λ³€κ²½ κΈˆμ§€ + 더 μ •ν™•ν•œ νƒ€μž…

  4. 닀쀑 단언 μœ„ν—˜ ⚠️

    as unknown as string

πŸ‘‰ 거의 λ§ˆμ§€λ§‰ μˆ˜λ‹¨

πŸ’‘ 핡심 μš”μ•½ (μ§„μ§œ μ€‘μš”)

  • as = νƒ€μž… κ°•μ œ μ§€μ • (컴파일러 속이기)
  • μ•ˆμ „ν•˜μ§€ μ•Šμ„ 수 있음 ⚠️
  • as const = κ°’ κ³ μ • + readonly
  • ! = null μ•„λ‹˜ 보μž₯ (μœ„ν—˜ν•¨)
  • 닀쀑 단언 = κ°€λŠ₯ν•˜μ§€λ§Œ μ΅œμ†Œν™”

✍️ ν•œμ€„ 정리

πŸ‘‰ νƒ€μž… 단언은 νƒ€μž…μ„ λ°”κΎΈλŠ” 것이 μ•„λ‹ˆλΌ, μ»΄νŒŒμΌλŸ¬μ—κ²Œ νƒ€μž…μ„ "믿게 ν•˜λŠ”" κΈ°λŠ₯이닀

.

πŸ”₯ 싀무

πŸ‘‰ μ‹€λ¬΄μ—μ„œ 자주 μ“°λŠ” νŒ¨ν„΄

const input = document.getElementById("id") as HTMLInputElement;

πŸ‘‰ DOM λ‹€λ£° λ•Œ 많이 μ‚¬μš©ν•¨

profile
Frontend Developer · 기둝 ⭐

0개의 λŒ“κΈ€