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

seoyoon_leeΒ·2026λ…„ 4μ›” 1일

TypeScript

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

🌱 1. μœ ν‹Έλ¦¬ν‹° νƒ€μž…μ΄ 뭐야?

πŸ‘‰ 이미 λ§Œλ“€μ–΄μ§„ β€œνŽΈλ¦¬ν•œ νƒ€μž… 도ꡬ”

μ‰½κ²Œ λ§ν•˜λ©΄
πŸ‘‰ νƒ€μž…μ„ λ‹€μ‹œ λ§Œλ“€μ§€ μ•Šκ³  β€œκ°€κ³΅β€ν•΄μ„œ μ“°λŠ” κΈ°λŠ₯

Post β†’ μΌλΆ€λ§Œ 선택 β†’ μƒˆλ‘œμš΄ νƒ€μž…
Post β†’ μ „λΆ€ ν•„μˆ˜λ‘œ λ³€κ²½ β†’ μƒˆλ‘œμš΄ νƒ€μž…

🧩 2. Partial (λΆ€λΆ„ 선택)

πŸ’‘ κ°œλ…
πŸ‘‰ λͺ¨λ“  ν”„λ‘œνΌν‹°λ₯Ό μ„ νƒμ μœΌλ‘œ(?) λ°”κΏ”μ€Œ

type Partial<T> = {
[key in keyof T]?: T[key];
};

πŸ‘‰ μ‰½κ²Œ 이해
μ›λž˜:

title: string (ν•„μˆ˜)

λ°”λ€Œλ©΄:

title?: string (선택)

πŸ“Œ μ‚¬μš© 이유
πŸ‘‰ "μž„μ‹œ μ €μž₯" / "μˆ˜μ • 쀑인 데이터"

const draft: Partial<Post> = {
title: 'μž„μ‹œ 제λͺ©'
};

βœ” μΌλΆ€λ§Œ 넣어도 μ—λŸ¬ μ—†μŒ

🧩 3. Required (λͺ¨λ‘ ν•„μˆ˜)

πŸ’‘ κ°œλ…
πŸ‘‰ 선택(optional)도 κ°•μ œλ‘œ ν•„μˆ˜λ‘œ λ°”κΏˆ

type Required<T> = {
[key in keyof T]-?: T[key];
};

핡심 포인트

πŸ‘‰ -? β†’ optional 제거

πŸ“Œ μ˜ˆμ‹œ

thumbnailURL?: string;

πŸ‘‡

thumbnailURL: string; // 무쑰건 μžˆμ–΄μ•Ό 함

🧩 4. Readonly (읽기 μ „μš©)

πŸ’‘ κ°œλ…
πŸ‘‰ μˆ˜μ • λͺ»ν•˜κ²Œ λ§‰μŒ

type Readonly<T> = {
  readonly [key in keyof T]: T[key];
};
  

πŸ“Œ μ˜ˆμ‹œ

readonlyPost.title = "λ³€κ²½"; ❌ μ—λŸ¬

πŸ‘‰ μ‹€λ¬΄μ—μ„œ β€œλ°μ΄ν„° λ³΄ν˜Έβ€ν•  λ•Œ 많이 μ‚¬μš©

🧩 5. Pick<T, K> (골라내기)

πŸ’‘ κ°œλ…
πŸ‘‰ ν•„μš”ν•œ κ²ƒλ§Œ κ°€μ Έμ˜€κΈ°

type Pick<T, K extends keyof T> = {
  [key in K]: T[key];
};

πŸ“Œ μ˜ˆμ‹œ

Pick<Post, 'title' | 'content'>

πŸ‘‰ κ²°κ³Ό



{
title: string;
content: string;
}

🧩 6. Omit<T, K> (빼기)

πŸ’‘ κ°œλ…
πŸ‘‰ νŠΉμ • ν”„λ‘œνΌν‹° 제거

type Omit<T, K> = Pick<T, Exclude<keyof T, K>>;

πŸ“Œ μ‰½κ²Œ 이해

Omit<Post, 'title'>

πŸ‘‰ κ²°κ³Ό

title ❌ 제거됨

🧩 7. Record<K, V> (객체 생성기)

πŸ’‘ κ°œλ…
πŸ‘‰ "ν‚€ + κ°’ νƒ€μž…"으둜 객체 μžλ™ 생성

type Record<K, V> = {
  [key in K]: V;
};

πŸ“Œ μ˜ˆμ‹œ

type Thumbnail = Record<
'large' | 'small',
{ url: string }
>;

πŸ‘‰ κ²°κ³Ό


{
large: { url: string };
small: { url: string };
}

🧩 8. Exclude<T, U> (제거)

πŸ’‘ κ°œλ…
πŸ‘‰ νŠΉμ • νƒ€μž… 제거

type Exclude<T, U> = T extends U ? never : T;

πŸ“Œ μ˜ˆμ‹œ

type A = Exclude<string | boolean, boolean>;

πŸ‘‰ κ²°κ³Ό

string

🧩 9. Extract<T, U> (μΆ”μΆœ)

πŸ’‘ κ°œλ…
πŸ‘‰ κ³΅ν†΅λœ κ²ƒλ§Œ 남김

type Extract<T, U> = T extends U ? T : never;

πŸ“Œ μ˜ˆμ‹œ

Extract<string | boolean, boolean>

πŸ‘‰ κ²°κ³Ό

boolean

🧩 10. ReturnType (ν•¨μˆ˜ κ²°κ³Ό νƒ€μž… μΆ”μΆœ)

πŸ’‘ κ°œλ…
πŸ‘‰ ν•¨μˆ˜μ˜ return νƒ€μž… κ°€μ Έμ˜€κΈ°

type ReturnType<T> =
  T extends (...args: any) => infer R ? R : never;

πŸ“Œ 핡심

πŸ‘‰ infer R = β€œνƒ€μž… 좔둠”

μ˜ˆμ‹œ

function funcA() {
return 'hello';
}

type A = ReturnType<typeof funcA>;

πŸ‘‰ κ²°κ³Ό

string

πŸ”₯ 핡심 정리 (μ§„μ§œ μ€‘μš”)
| νƒ€μž… | 의미 |
| ---------- | -------- |
| Partial | μΌλΆ€λ§Œ |
| Required | μ „λΆ€ ν•„μˆ˜ |
| Readonly | μˆ˜μ • κΈˆμ§€ |
| Pick | 골라쓰기 |
| Omit | λΉΌκΈ° |
| Record | 객체 λ§Œλ“€κΈ° |
| Exclude | 제거 |
| Extract | μΆ”μΆœ |
| ReturnType | ν•¨μˆ˜ κ²°κ³Ό νƒ€μž… |

⚠️ 자주 ν•˜λŠ” μ‹€μˆ˜

  1. keyof 이해 λͺ»ν•¨
    πŸ‘‰ 객체 ν‚€λ₯Ό λ½‘λŠ” 것
keyof Post
// "title" | "content" | ...
  
  1. Pickμ—μ„œ extends μ•ˆ μ“°λŠ” μ‹€μˆ˜
    ❌

type Pick<T, K> = ...

βœ”

type Pick<T, K extends keyof T>

  1. Omit ꡬ쑰 이해 λͺ»ν•¨

πŸ‘‰ 사싀 λ‚΄λΆ€λŠ” 이거 ν•˜λ‚˜μž„

Pick + Exclude μ‘°ν•©

🧠 μ •λ¦¬μš©

πŸ“Œ μœ ν‹Έλ¦¬ν‹° νƒ€μž… 정리

βœ… Partial

λͺ¨λ“  ν”„λ‘œνΌν‹°λ₯Ό μ„ νƒμ μœΌλ‘œ λ³€κ²½

βœ… Required

λͺ¨λ“  ν”„λ‘œνΌν‹°λ₯Ό ν•„μˆ˜λ‘œ λ³€κ²½

βœ… Readonly

λͺ¨λ“  ν”„λ‘œνΌν‹°λ₯Ό 읽기 μ „μš©μœΌλ‘œ λ³€κ²½

βœ… Pick<T, K>

νŠΉμ • ν”„λ‘œνΌν‹°λ§Œ 선택

βœ… Omit<T, K>

νŠΉμ • ν”„λ‘œνΌν‹° 제거

βœ… Record<K, V>

킀와 κ°’μœΌλ‘œ 객체 생성

βœ… Exclude<T, U>

Tμ—μ„œ U 제거

βœ… Extract<T, U>

Tμ—μ„œ U만 μΆ”μΆœ

βœ… ReturnType

ν•¨μˆ˜ λ°˜ν™˜ νƒ€μž… μΆ”μΆœ

profile
Frontend Developer · 기둝 ⭐

0개의 λŒ“κΈ€