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

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

TypeScript

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

πŸ“Œ 1. νƒ€μž…μŠ€ν¬λ¦½νŠΈλ₯Ό μ΄ν•΄ν•œλ‹€λŠ” 것

νƒ€μž…μŠ€ν¬λ¦½νŠΈλ₯Ό μ΄ν•΄ν•œλ‹€λŠ” 것은 λ‹¨μˆœνžˆ 문법을 μ•„λŠ” 게 μ•„λ‹ˆλΌ
λ‹€μŒ 3κ°€μ§€λ₯Ό μ΄ν•΄ν•˜λŠ” 것이닀.

βœ” 1) νƒ€μž… μ •μ˜

let num: number = 10;
let name: string = "army";

πŸ‘‰ κ°’μ˜ μ’…λ₯˜λ₯Ό λͺ…ν™•ν•˜κ²Œ μ§€μ •

βœ” 2) νƒ€μž… κ°„μ˜ 관계 이해

let num: number = 10;
let literal: 10 = 10;

πŸ‘‰ 10 βŠ‚ number (μž‘μ€ νƒ€μž… β†’ 큰 νƒ€μž… 포함)

βœ” 3) νƒ€μž… 였λ₯˜ 검사

let num: number = "hello"; // ❌

πŸ‘‰ μ‹€ν–‰ 전에 였λ₯˜λ₯Ό μž‘μ•„μ€Œ

πŸ“Œ 2. νƒ€μž…μ€ β€œμ§‘ν•©β€μ΄λ‹€ ⭐

πŸ‘‰ νƒ€μž… = κ°’λ“€μ˜ μ§‘ν•©

예:
number β†’ λͺ¨λ“  숫자
10 β†’ λ”± ν•˜λ‚˜μ˜ κ°’
10 βŠ‚ number

πŸ‘‰ 이 κ°œλ… ν•˜λ‚˜λ‘œ λͺ¨λ“  게 μ„€λͺ…됨

πŸ“Œ 3. νƒ€μž… 계측도 (전체 ꡬ쑰)

unknown (μ΅œμƒμœ„)
↑
any (μ˜ˆμ™Έ ⚠️)
↑
string / number / boolean
↑
λ¦¬ν„°λŸ΄ νƒ€μž… ("hello", 10)
↑
never (μ΅œν•˜μœ„)

πŸ“Œ 4. 특수 νƒ€μž… 3κ°€μ§€

βœ” unknown (κ°€μž₯ μ•ˆμ „ν•œ μ΅œμƒμœ„)
let a: unknown = 10;

πŸ‘‰ λͺ¨λ“  κ°’ κ°€λŠ₯
πŸ‘‰ ν•˜μ§€λ§Œ λ°”λ‘œ μ‚¬μš© λΆˆκ°€

a.toFixed(); // ❌

βœ” any (νƒ€μž… 포기 ⚠️)

let a: any = 10;
a.toFixed(); // κ°€λŠ₯

πŸ‘‰ νƒ€μž… 검사 λ¬΄μ‹œ β†’ μœ„ν—˜

βœ” never (μ΅œν•˜μœ„ νƒ€μž…)

function error(): never {
throw new Error();
}

πŸ‘‰ μ ˆλŒ€ 값이 λ‚˜μ˜€μ§€ μ•ŠλŠ” 경우

πŸ“Œ 5. νƒ€μž… ν˜Έν™˜μ„±

πŸ‘‰ β€œμ΄ νƒ€μž…μ„ λ‹€λ₯Έ νƒ€μž…μœΌλ‘œ 써도 λ˜λŠ”κ°€?”

βœ” κΈ°λ³Έ κ·œμΉ™

πŸ‘‰ μž‘μ€ νƒ€μž… β†’ 큰 νƒ€μž… βœ…
πŸ‘‰ 큰 νƒ€μž… β†’ μž‘μ€ νƒ€μž… ❌

βœ” μ—…μΊμŠ€νŒ…

let a: 10 = 10;
let b: number = a; // βœ…

βœ” λ‹€μš΄μΊμŠ€νŒ…

let a: number = 10;
let b: 10 = a; // ❌

πŸ“Œ 6. κΈ°λ³Έ νƒ€μž… κ°„μ˜ ν˜Έν™˜μ„±

let num1: number = 10;
let num2: 10 = 10;
num1 = num2; // βœ…

πŸ‘‰ 이유

10 βŠ‚ number

πŸ“Œ 7. 객체 νƒ€μž… ν˜Έν™˜μ„± (핡심 ⭐⭐⭐)

πŸ‘‰ νƒ€μž…μŠ€ν¬λ¦½νŠΈλŠ” β€œκ΅¬μ‘° 기반 비ꡐ”λ₯Ό ν•œλ‹€

type Animal = {
  name: string;
  color: string;
};

type Cat = {
  name: string;
  color: string;
  breed: string;
};

βœ” 관계

Animal πŸ‘‰ μŠˆνΌνƒ€μž… (쑰건 적음)
Cat πŸ‘‰ μ„œλΈŒνƒ€μž… (쑰건 많음)

βœ” μ—…μΊμŠ€νŒ…

let animal: Animal;
let cat: Cat = {
name: "army",
color: "black",
breed: "μ½”λ¦¬μ•ˆ 숏",
};

animal = cat; // βœ…

βœ” λ‹€μš΄μΊμŠ€νŒ…

// cat = animal; ❌

βœ” 핡심 κ·œμΉ™

πŸ‘‰ β€œν•„μš”ν•œ 속성을 λ‹€ κ°€μ§€κ³  있으면 OK”

πŸ“Œ 8. 초과 ν”„λ‘œνΌν‹° 검사 ⭐

πŸ‘‰ 객체 λ¦¬ν„°λŸ΄μ—μ„œλ§Œ λ°œμƒ

❌ μ—λŸ¬

let book: Book = {
name: "λ¦¬μ•‘νŠΈ",
price: 30000,
skill: "react", // ❌
};

βœ… ν—ˆμš© (λ³€μˆ˜ μ‚¬μš©)

let programingBook = {
  name: "λ¦¬μ•‘νŠΈ",
  price: 30000,
  skill: "react",
};

let book: Book = programingBook; // βœ…

βœ” ν•¨μˆ˜μ—μ„œλ„ 동일

func({
  name: "λ¦¬μ•‘νŠΈ",
  price: 30000,
  skill: "react", // ❌
});

func(programingBook); // βœ…

πŸ“Œ 9. 핡심 κ°œλ… ν•œλ°© 정리 ⭐

βœ” νƒ€μž… = μ§‘ν•©

10 βŠ‚ number

βœ” νƒ€μž… 계측

unknown (μ΅œμƒμœ„)
κΈ°λ³Έ νƒ€μž…
λ¦¬ν„°λŸ΄ νƒ€μž…
never (μ΅œν•˜μœ„)

βœ” νƒ€μž… ν˜Έν™˜μ„±

πŸ‘‰ μž‘μ€ β†’ 큰 κ°€λŠ₯
πŸ‘‰ 큰 β†’ μž‘μ€ λΆˆκ°€λŠ₯

βœ” 객체 νƒ€μž…

πŸ‘‰ β€œκ΅¬μ‘°λ§Œ 맞으면 λœλ‹€β€

βœ” 초과 ν”„λ‘œνΌν‹° 검사

πŸ‘‰ 객체 λ¦¬ν„°λŸ΄μ—μ„œλ§Œ 엄격 검사

πŸ“Œ 10. 자주 ν•˜λŠ” μ‹€μˆ˜ 🚨

❌ any λ‚¨λ°œ
πŸ‘‰ νƒ€μž…μŠ€ν¬λ¦½νŠΈ 의미 없어짐

❌ unknown을 λ°”λ‘œ μ‚¬μš©
πŸ‘‰ λ°˜λ“œμ‹œ νƒ€μž… 체크 ν•„μš”

❌ λ‹€μš΄μΊμŠ€νŒ… 착각
cat = animal; // ❌

❌ κ°μ²΄λŠ” μ™„μ „νžˆ κ°™μ•„μ•Ό ν•œλ‹€κ³  생각

πŸ‘‰ ❌ ν‹€λ¦Ό
πŸ‘‰ ν•„μš”ν•œ μ†μ„±λ§Œ 있으면 OK

πŸš€ μ΅œμ’… ν•œ 쀄 정리

πŸ‘‰ νƒ€μž…μŠ€ν¬λ¦½νŠΈλŠ”
β€œκ°’μ˜ μ§‘ν•©κ³Ό κ·Έ 관계λ₯Ό μ΄μš©ν•΄ 였λ₯˜λ₯Ό λ§‰λŠ” 언어”이닀.

profile
Frontend Developer · 기둝 ⭐

0개의 λŒ“κΈ€