μΈν”„λŸ° κ°•μ˜ - ν•œ μž… 크기둜 μž˜λΌλ¨ΉλŠ” νƒ€μž…μŠ€ν¬λ¦½νŠΈ (μœ ν‹Έλ¦¬ν‹° νƒ€μž…)

2025. 6. 14. 11:18Β·πŸ“‚ Program Language Study/πŸ“„ TypeScript 곡뢀
 

ν•œ μž… 크기둜 μž˜λΌλ¨ΉλŠ” νƒ€μž…μŠ€ν¬λ¦½νŠΈ(TypeScript) κ°•μ˜ | μ΄μ •ν™˜ Winterlood - μΈν”„λŸ°

μ΄μ •ν™˜ Winterlood | ,   ν”„λ‘ νŠΈμ—”λ“œμ˜ ν”Όν•  수 μ—†λŠ” λŒ€μ„Έ νƒ€μž…μŠ€ν¬λ¦½νŠΈ,μ΄μ œλŠ” μ œλŒ€λ‘œ 정볡할 λ•Œκ°€ μ™”μŠ΅λ‹ˆλ‹€! 😎 [사진]μΈν”„μ½˜ 2023 'νƒ€μž…μŠ€ν¬λ¦½νŠΈλŠ” μ™œ 그럴까?' λ°œν‘œμžμ˜ κ°•μ˜μž…λ‹ˆλ‹€.   🧐 λ°°μ›Œ

www.inflearn.com

 

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

 

βœ… μœ ν‹Έλ¦¬ν‹° νƒ€μž…μ΄λž€?

  • νƒ€μž…μŠ€ν¬λ¦½νŠΈκ°€ λ‚΄μž₯으둜 μ œκ³΅ν•˜λŠ” νŠΉμˆ˜ν•œ νƒ€μž… λͺ¨μŒ
  • μ œλ„€λ¦­, 쑰건뢀 νƒ€μž…, λ§΅λ“œ νƒ€μž… λ“± 기초 νƒ€μž… μ‘°μž‘ κΈ°λŠ₯듀을 μ‘°ν•©ν•΄ μ‹€λ¬΄μ—μ„œ 자주 μ“°μ΄λŠ” ν˜•νƒœλ‘œ ꡬ성
  • 즉, 자주 λ°˜λ³΅λ˜λŠ” νŒ¨ν„΄μ„ κ°„νŽΈν•˜κ²Œ μ μš©ν•  수 μžˆλ„λ‘ λ§Œλ“€μ–΄μ§„ μž¬μ‚¬μš© κ°€λŠ₯ν•œ νƒ€μž… 도ꡬ

 

πŸ“Œ λ§΅λ“œ νƒ€μž… 기반의 μœ ν‹Έλ¦¬ν‹° νƒ€μž… 1 - Partial, Required, Readonly

// βœ… Partial<T>
// 뢀뢄적인, μΌλΆ€λΆ„μ˜
// νŠΉμ • 객체 νƒ€μž…μ˜ λͺ¨λ“  ν”„λ‘œνΌν‹°λ₯Ό '선택적 ν”„λ‘œνΌν‹°'둜 λ°”κΏ”μ£ΌλŠ” μœ ν‹Έλ¦¬ν‹° νƒ€μž…

interface Post {
    title: string;
    tags: string[];
    content: string;
    thumbnailURL?: string;
};

// 직접 κ΅¬ν˜„
type Partial<T> = {
    [key in keyof T]?: T[key];
};

// μ˜ˆμ‹œ: μž„μ‹œ μ €μž₯용 κ²Œμ‹œκΈ€μ€ 일뢀 ν”„λ‘œνΌν‹°λ§Œ μžˆμ–΄λ„ 됨
const draft: Partial<Post> = {
    title: "제λͺ© λ‚˜μ€‘μ— μ§“μž",
    content: "μ΄ˆμ•ˆ...",
};

// βœ… Required<T>
// ν•„μˆ˜μ˜, ν•„μˆ˜μ μΈ
// νŠΉμ • 객체 νƒ€μž…μ˜ λͺ¨λ“  ν”„λ‘œνΌν‹°λ₯Ό 'ν•„μˆ˜ ν”„λ‘œνΌν‹°'둜 λ°”κΏ”μ£ΌλŠ” μœ ν‹Έλ¦¬ν‹° νƒ€μž…

// 직접 κ΅¬ν˜„
type Required<T> = {
    [key in keyof T]-?: T[key];
};

// μ˜ˆμ‹œ: 썸넀일이 λ°˜λ“œμ‹œ ν¬ν•¨λ˜μ–΄μ•Ό ν•˜λŠ” κ²Œμ‹œκΈ€
const withThumbnailPost: Required<Post> = {
    title: "ν•œμž… νƒ€μŠ€ ν›„κΈ°",
    tags: ["ts"],
    content: "",
    thumbnailURL: "https://...",
};

// βœ… Readonly<T>
// 읽기 μ „μš©, μˆ˜μ • λΆˆκ°€
// νŠΉμ • 객체 νƒ€μž…μ˜ λͺ¨λ“  ν”„λ‘œνΌν‹°λ₯Ό '읽기 μ „μš© ν”„λ‘œνΌν‹°'둜 λ°”κΏ”μ£ΌλŠ” μœ ν‹Έλ¦¬ν‹° νƒ€μž…

// 직접 κ΅¬ν˜„
type Readonly<T> = {
    readonly [key in keyof T]: T[key];
}

// μ˜ˆμ‹œ: μˆ˜μ •μ΄ κΈˆμ§€λœ 보호 κ²Œμ‹œκΈ€
const readonlyPost: Readonly<Post> = {
    title: "보호된 κ²Œμ‹œκΈ€ μž…λ‹ˆλ‹€.",
    tags: [],
    content: "",
};

 

πŸ“Œ λ§΅λ“œ νƒ€μž… 기반의 μœ ν‹Έλ¦¬ν‹° νƒ€μž… 2 - Pick, Omit, Record

// βœ… Pick<T, K>
// 뽑닀, κ³ λ₯΄λ‹€
// 객체 νƒ€μž…μ—μ„œ νŠΉμ • key만 골라 μƒˆλ‘œμš΄ 객체 νƒ€μž…μ„ 생성

interface Post {
    title: string;
    tags: string[];
    content: string;
    thumbnailURL?: string;
};

// 직접 κ΅¬ν˜„
type Pick<T, K extends keyof T> = {
    [key in K]: T[key];
}

// μ˜ˆμ‹œ: 였래된 κΈ€μ—λŠ” νƒœκ·Έλ‚˜ 썸넀일이 μ—†λ‹€κ³  κ°€μ •
const legacyPost: Pick<Post, "title" | "content"> = {
    title: "μ˜›λ‚  κΈ€",
    content: "μ˜›λ‚  컨텐츠",
}

// βœ… Omit<T, K>
// μƒλž΅ν•˜λ‹€, λΉΌλ‹€
// 객체 νƒ€μž…μ—μ„œ νŠΉμ • key만 μ œκ±°ν•œ λ‚˜λ¨Έμ§€λ‘œ κ΅¬μ„±λœ νƒ€μž…μ„ 생성

// 직접 κ΅¬ν˜„
type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;

const noTitlePost: Omit<Post, "title"> = {
    content: "",
    tags: [],
    thumbnailURL: "",
};

// βœ… Record<K, V>
// λ™μΌν•œ ꡬ쑰λ₯Ό κ°–λŠ” 객체 νƒ€μž…μ„ λΉ λ₯΄κ²Œ 생성
// key λͺ©λ‘(K)을 κΈ°μ€€μœΌλ‘œ 각 key에 λ™μΌν•œ value νƒ€μž…(V)을 λΆ€μ—¬

// 직접 κ΅¬ν˜„
type Record<K extends keyof any, V> = {
    [key in K]: V;
};

// μ˜ˆμ‹œ: 썸넀일 μœ ν˜•λ³„ 속성 μ •μ˜
type Thumbnail = Record<"large" | "medium" | "small | watch", { url: string, size: number }>;

 

πŸ“Œ 쑰건뢀 νƒ€μž… 기반의 μœ ν‹Έλ¦¬ν‹° νƒ€μž… - Exclude, Extract, ReturnType

// βœ… Exclude<T, U>
// μ œμ™Έν•˜λ‹€, μΆ”λ°©ν•˜λ‹€
// μœ λ‹ˆμ˜¨ νƒ€μž… Tμ—μ„œ U에 ν•΄λ‹Ήν•˜λŠ” νƒ€μž…λ§Œ 제거

// 직접 κ΅¬ν˜„
type Exclude<T, U> = T extends U ? never: T;

type A = Exclude<string | boolean, boolean>;
// λΆ„μ‚° 쑰건뢀 νƒ€μž…μœΌλ‘œ 평가됨
// Exclude<string>; // => string
// Exclude<boolean>; // => never
// λ”°λΌμ„œ AλŠ” string

// βœ… Extract<T, U>
// μΆ”μΆœν•˜λ‹€, 뽑아내닀
// μœ λ‹ˆμ˜¨ νƒ€μž… Tμ—μ„œ U에 ν•΄λ‹Ήν•˜λŠ” νƒ€μž…λ§Œ μΆ”μΆœ

// 직접 κ΅¬ν˜„
type Extract<T, U> = T extends U ? T : never;

type B = Extract<string | boolean, boolean>;
// λΆ„μ‚° 쑰건뢀 νƒ€μž…μœΌλ‘œ 평가됨
// Extract<string>; // => never
// Extract<boolean>; // => boolean
// λ”°λΌμ„œ BλŠ” boolean

// βœ… ReturnType<T>
// ν•¨μˆ˜μ˜ λ°˜ν™˜κ°’ νƒ€μž…μ„ μΆ”μΆœν•˜λŠ” μœ ν‹Έλ¦¬ν‹° νƒ€μž…

// 직접 κ΅¬ν˜„
type ReturnType<T extends (...args: any) => any> = T extends (...args: any) => infer R ? R: never;

function funcA() {
    return "hello";
}

function funcB() {
    return 10;
}

type ReturnA = ReturnType<typeof funcA>; // string
type ReturnB = ReturnType<typeof funcB>; // number

 

μ €μž‘μžν‘œμ‹œ λΉ„μ˜λ¦¬ λ³€κ²½κΈˆμ§€ (μƒˆμ°½μ—΄λ¦Ό)

'πŸ“‚ Program Language Study > πŸ“„ TypeScript 곡뢀' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

μΈν”„λŸ° κ°•μ˜ - ν•œ μž… 크기둜 μž˜λΌλ¨ΉλŠ” νƒ€μž…μŠ€ν¬λ¦½νŠΈ (쑰건뢀 νƒ€μž…)  (0) 2025.06.13
μΈν”„λŸ° κ°•μ˜ - ν•œ μž… 크기둜 μž˜λΌλ¨ΉλŠ” νƒ€μž…μŠ€ν¬λ¦½νŠΈ (νƒ€μž… μ‘°μž‘ν•˜κΈ°)  (0) 2025.06.13
μΈν”„λŸ° κ°•μ˜ - ν•œ μž… 크기둜 μž˜λΌλ¨ΉλŠ” νƒ€μž…μŠ€ν¬λ¦½νŠΈ (μ œλ„€λ¦­)  (0) 2025.06.12
μΈν”„λŸ° κ°•μ˜ - ν•œ μž… 크기둜 μž˜λΌλ¨ΉλŠ” νƒ€μž…μŠ€ν¬λ¦½νŠΈ (클래슀)  (0) 2025.06.11
μΈν”„λŸ° κ°•μ˜ - ν•œ μž… 크기둜 μž˜λΌλ¨ΉλŠ” νƒ€μž…μŠ€ν¬λ¦½νŠΈ (μΈν„°νŽ˜μ΄μŠ€)  (0) 2025.06.11
'πŸ“‚ Program Language Study/πŸ“„ TypeScript 곡뢀' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • μΈν”„λŸ° κ°•μ˜ - ν•œ μž… 크기둜 μž˜λΌλ¨ΉλŠ” νƒ€μž…μŠ€ν¬λ¦½νŠΈ (쑰건뢀 νƒ€μž…)
  • μΈν”„λŸ° κ°•μ˜ - ν•œ μž… 크기둜 μž˜λΌλ¨ΉλŠ” νƒ€μž…μŠ€ν¬λ¦½νŠΈ (νƒ€μž… μ‘°μž‘ν•˜κΈ°)
  • μΈν”„λŸ° κ°•μ˜ - ν•œ μž… 크기둜 μž˜λΌλ¨ΉλŠ” νƒ€μž…μŠ€ν¬λ¦½νŠΈ (μ œλ„€λ¦­)
  • μΈν”„λŸ° κ°•μ˜ - ν•œ μž… 크기둜 μž˜λΌλ¨ΉλŠ” νƒ€μž…μŠ€ν¬λ¦½νŠΈ (클래슀)
YeonSu02
YeonSu02
Email : rkddustn2519@naver.com
  • YeonSu02
    IsLiife2
    YeonSu02
  • 전체
    였늘
    μ–΄μ œ
    • λΆ„λ₯˜ 전체보기 N
      • πŸ“‚ Computer Science
      • πŸ“‚ Unity Engine Study
        • πŸ“„ Unity μΈν”„λŸ° κ°•μ˜
        • πŸ“„ Unity 유튜브 κ°•μ˜
        • πŸ“„ Unity μ°Έκ³ 
        • πŸ’» Game Development
      • πŸ“‚ Quality Assurance Study
        • πŸ”₯ μ—˜λ¦¬μŠ€ SW QAνŠΈλž™
        • πŸ“„ QA 곡뢀
        • πŸ“š QA μ±… 리뷰
      • πŸ“‚ Program Language Study
        • πŸ“„ C# 곡뢀
        • πŸ“„ 파이썬 곡뢀
        • πŸ“„ JavaScript 곡뢀
        • πŸ“„ TypeScript 곡뢀
      • πŸ“‚ Additional Study N
        • πŸ“„ Git
        • πŸ“„ Docker
        • πŸ“„ Jenkins
        • πŸ“„ Firebase
        • πŸ“„ Economy N
        • πŸ“„ License
      • πŸ“‚ Experience
  • λΈ”λ‘œκ·Έ 메뉴

    • ν™ˆ
  • 링크

    • GitHub
  • 곡지사항

  • 인기 κΈ€

  • νƒœκ·Έ

    qa 직무 ꡐ윑
    κ΅­λΉ„λΆ€νŠΈμΊ ν”„ μΆ”μ²œ
    μ—‘μ…€
    μ •μ²˜κΈ° μ‹€κΈ°
    qa μ±… 리뷰
    qa λΆ€νŠΈμΊ ν”„
    μ •μ²˜κΈ° 독학
    λΆ€νŠΈμΊ ν”„ μΆ”μ²œ
    qa자격증
    μ—˜λ¦¬μŠ€νŠΈλž™
    자격증
    ν…ŒμŠ€νŒ…μžκ²©μ¦
    qa κ°•μ˜
    qa μ±…
    μ»΄ν“¨ν„°ν™œμš©λŠ₯λ ₯
    QA
    μ •μ²˜κΈ° ν•„κΈ°
    μ»΄ν™œ
    μ—˜λ¦¬μŠ€νŠΈλž™ ν›„κΈ°
    istqb-ctfl
  • 졜근 λŒ“κΈ€

  • 졜근 κΈ€

  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.3
YeonSu02
μΈν”„λŸ° κ°•μ˜ - ν•œ μž… 크기둜 μž˜λΌλ¨ΉλŠ” νƒ€μž…μŠ€ν¬λ¦½νŠΈ (μœ ν‹Έλ¦¬ν‹° νƒ€μž…)
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”