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

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

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

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

www.inflearn.com

 

πŸ“Œ νƒ€μž…μŠ€ν¬λ¦½νŠΈ μ΄ν•΄ν•˜κΈ°

 

βœ… λ¬Έλ²•λ§Œ μ™Έμš°λ©΄ μΆ©λΆ„ν•˜μ§€ μ•Šλ‚˜?

  • μ²˜μŒμ—λŠ” νƒ€μž…μŠ€ν¬λ¦½νŠΈ λ¬Έλ²•λ§Œ μ™Έμ›Œ λΉ λ₯΄κ²Œ ν”„λ‘œμ νŠΈμ— μ μš©ν•  수 있음
  • μ‹€μ œλ‘œ νƒ€μž…μŠ€ν¬λ¦½νŠΈ 곡식 λ¬Έμ„œλ„ 문법 μ€‘μ‹¬μ˜ cheat sheetsλ₯Ό 제곡
  • ν•˜μ§€λ§Œ λ³΅μž‘ν•œ μƒν™©μ—μ„œλŠ” 문법 μ•”κΈ°λ‘œλŠ” ν•œκ³„μ— λΆ€λ”ͺ히기 쉬움

βœ… λ¬Έλ²•λ§Œ 외웠을 λ•Œ μƒκΈ°λŠ” 문제

  • λ³΅μž‘ν•œ νƒ€μž… μ •μ˜λ‚˜ μ˜ˆμ™Έ 상황에 슀슀둜 λŒ€μ²˜ν•˜κΈ° 어렀움
  • νƒ€μž… 였λ₯˜ 해결에 μ‹œκ°„μ„ μŸλ‹€ 보면 μ½”λ“œκ°€ λ”λŸ¬μ›Œμ§€κ³  생산성이 떨어짐
  • μ‹€μ œλ‘œ λ¬Έλ²•λ§ŒμœΌλ‘œ ν”„λ‘œμ νŠΈμ— νˆ¬μž…λλ‹€κ°€ 였히렀 개발 기간이 λŠ˜μ–΄λ‚œ κ²½ν—˜ 있음

βœ… κ·Έλž˜μ„œ μ™œ 원리λ₯Ό λ°°μ›Œμ•Ό ν•˜λ‚˜?

  • νƒ€μž…μŠ€ν¬λ¦½νŠΈλŠ” λ‹¨μˆœν•œ μ–Έμ–΄κ°€ μ•„λ‹˜
  • νƒ€μž… μ •μ˜ κΈ°μ€€, νƒ€μž… κ°„ 관계, 였λ₯˜ 검사 방식 λ“± λ™μž‘ 원리λ₯Ό 이해해야 μ‹€μ „μ—μ„œ 자유둭게 ν™œμš© κ°€λŠ₯함
  • μƒˆλ‘œμš΄ 문제 μ•žμ—μ„œλ„ 즐겁고 λŠ₯λ™μ μœΌλ‘œ ν•΄κ²°ν•  수 μžˆλŠ” μ‹€λ ₯ κ°–μΆ”κΈ°

 

πŸ“Œ νƒ€μž…μ€ 집합이닀

 

βœ… νƒ€μž…μ€ 집합이닀

  • νƒ€μž…μŠ€ν¬λ¦½νŠΈμ—μ„œ ‘νƒ€μž…’은 κ°’λ“€μ˜ 집합을 의미
     -> 예) number νƒ€μž…: μ—¬λŸ¬ 숫자λ₯Ό ν¬ν•¨ν•œ 큰 μ§‘ν•©
     -> 예) number Literal νƒ€μž…: μž‘μ€ μ§‘ν•©
  • number Literal νƒ€μž…(예: 20)은 number νƒ€μž…(예: 숫자 전체)의 λΆ€λΆ„ μ§‘ν•©
     -> 20 ⊆ number
  • νƒ€μž… κ°„μ—λŠ” μƒν•˜ 관계(포함 관계)κ°€ μ‘΄μž¬ν•¨
     -> μƒμœ„ νƒ€μž…: 슈퍼 νƒ€μž… (λΆ€λͺ¨ νƒ€μž…)
     -> ν•˜μœ„ νƒ€μž…: μ„œλΈŒ νƒ€μž… (μžμ‹ νƒ€μž…)

 

 

βœ… νƒ€μž… ν˜Έν™˜μ„±μ΄λž€?

  • 두 νƒ€μž… A, Bκ°€ μžˆμ„ λ•Œ, A νƒ€μž…μ˜ 값을 B νƒ€μž…μ²˜λŸΌ μ‚¬μš©ν•  수 μžˆλŠ”μ§€ νŒλ‹¨ν•˜λŠ” 것
  • μ„œλΈŒ νƒ€μž… -> 슈퍼 νƒ€μž… : κ°€λŠ₯ (μ—…μΊμŠ€νŒ…)
     -> 예) 20 (Number Literal) -> number : κ°€λŠ₯
  • 슈퍼 νƒ€μž… -> μ„œλΈŒ νƒ€μž… : λΆˆκ°€λŠ₯ (λ‹€μš΄μΊμŠ€νŒ…)
     -> 예) number -> 20 : λΆˆκ°€λŠ₯

 

 

βœ… μ™œ λ‹€μš΄μΊμŠ€νŒ…μ€ λΆˆκ°€λŠ₯ν• κΉŒ?

  • num1: number -> 10, 999, -5 λ“± λͺ¨λ“  숫자 κ°€λŠ₯
  • num2: 10 -> 였직 10만 κ°€λŠ₯
  • num1에 μ–΄λ–€ 값이 λ“€μ–΄ μžˆλŠ”μ§€ ν™•μ‹ ν•  수 μ—†κΈ° λ•Œλ¬Έμ—, νƒ€μž… μ•ˆμ •μ„± 보μž₯을 μœ„ν•΄ νƒ€μž…μŠ€ν¬λ¦½νŠΈκ°€ κΈˆμ§€

 

πŸ“Œ νƒ€μž… 계측도와 ν•¨κ»˜ κΈ°λ³Ένƒ€μž… μ‚΄νŽ΄λ³΄κΈ°

// βœ… Unknown νƒ€μž…
function unknownExam() {
    // πŸ”Ό μ—… μΊμŠ€νŒ…
    let a: unknown = 1;
    let b: unknown = "hello";
    let c: unknown = true;
    let d: unknown = null;
    let e: unknown = undefined;

    // πŸ”½ λ‹€μš΄ μΊμŠ€νŒ…
    let unknownVar: unknown;
    // let num: number = unknownVar;
    // let str: string = unknownVar;
    // let bool: boolean = unknownVar;
}

// βœ… Never νƒ€μž…
function neverExam() {
    function neverFunc(): never {
        while (true) {}
    }

    // πŸ”Ό μ—… μΊμŠ€νŒ…
    let num: number = neverFunc();
    let str: string = neverFunc();
    let bool: boolean = neverFunc();

    // πŸ”½ λ‹€μš΄ μΊμŠ€νŒ…
    let never1: never;
    // never1 = 10;
    // never1 = "string";
    // never1 = true;
}

// βœ… Void νƒ€μž…
function voidExam() {
    function voidFunc(): void {
        console.log("void function!")
    }

    // πŸ”Ό μ—… μΊμŠ€νŒ…
    let voidVar: void = undefined;
}

// βœ… any νƒ€μž…
function anyExam() {
    let unknownVar: unknown;
    let anyVar: any;
    let undefinedVar: undefined;
    let neverVar: never;

    // πŸ“Œ anyλŠ” νƒ€μž… 계측도 μ˜ˆμ™Έ → 무엇이든 μ—…/λ‹€μš΄ μΊμŠ€νŒ… κ°€λŠ₯
    anyVar = unknownVar;
    undefinedVar = anyVar;

    // ❌ μ˜ˆμ™Έ: neverλŠ” μ–΄λ–€ νƒ€μž…μœΌλ‘œλ„ λ‹€μš΄μΊμŠ€νŒ… λΆˆκ°€λŠ₯
    // neverVar = anyVar;
}

 

πŸ“Œ 객체 νƒ€μž…μ˜ ν˜Έν™˜μ„±

// βœ… 객체 νƒ€μž… ν˜Έν™˜μ„±
// 두 객체 νƒ€μž… A, Bκ°€ μžˆμ„ λ•Œ, A νƒ€μž…μ˜ 값을 B νƒ€μž…μ²˜λŸΌ μ‚¬μš©ν•  수 μžˆλŠ”μ§€ νŒλ‹¨
type Animal = {
    name: string;
    color: string;
};

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

let animal: Animal = {
    name: "κΈ°λ¦°",
    color: "yellow",
};

let dog: Dog = {
    name: "강말리",
    color: "white",
    breed: "λ§ν‹°μ¦ˆ",
}; 

animal = dog; // πŸ”Ό μ—… μΊμŠ€νŒ…
// dog = animal; // πŸ”½ λ‹€μš΄ μΊμŠ€νŒ…

type Book = {
    name: string;
    price: number;
};

type ProgrammingBook = {
    name: string;
    price: number;
    skill: string;
};

let book: Book;
let programmingBook: ProgrammingBook = {
    name: "ν•œ μž… 크기둜 μž˜λΌλ¨ΉλŠ” νƒ€μž…μŠ€ν¬λ¦½νŠΈ",
    price: 33000,
    skill: "typescript",
};

book = programmingBook; // πŸ”Ό μ—… μΊμŠ€νŒ…
// programmingBook = book // πŸ”½ λ‹€μš΄ μΊμŠ€νŒ…

// βœ… 초과 ν”„λ‘œνΌν‹° 검사
// 객체 λ¦¬ν„°λŸ΄μ„ 직접 ν• λ‹Ήν•  λ•ŒλŠ” νƒ€μž…μ— μ •μ˜λ˜μ§€ μ•Šμ€ ν”„λ‘œνΌν‹°κ°€ 있으면 였λ₯˜
let book2: Book = {
    name: "ν•œ μž… 크기둜 μž˜λΌλ¨ΉλŠ” νƒ€μž…μŠ€ν¬λ¦½νŠΈ",
    price: 33000,
    // skill: "typescript", // Book νƒ€μž…μ—λŠ” skill이 μ—†κΈ° λ•Œλ¬Έμ— 였λ₯˜ λ°œμƒ
}

// βœ… 초과 ν”„λ‘œνΌν‹° 검사λ₯Ό ν”Όν•˜λŠ” 방법
let book3: Book = programmingBook; // 객체 λ¦¬ν„°λŸ΄μ΄ μ•„λ‹Œ λ³€μˆ˜λ‚˜ 객체둜 μ „λ‹¬ν•˜λ©΄ 초과 ν”„λ‘œνΌν‹° 검사가 μ μš©λ˜μ§€ μ•ŠμŒ

 

πŸ“Œ λŒ€μˆ˜ νƒ€μž…

// βœ… λŒ€μˆ˜ νƒ€μž… (Algebraic Types)
// μ—¬λŸ¬ 개의 νƒ€μž…μ„ μ‘°ν•©ν•΄ μƒˆλ‘œμš΄ νƒ€μž…μ„ λ§Œλ“œλŠ” 방식
// λŒ€ν‘œμ μœΌλ‘œ ν•©μ§‘ν•©(Union), ꡐ집합(Intersection)이 쑴재

// 1. ν•©μ§‘ν•© - Union νƒ€μž…
// μ—¬λŸ¬ νƒ€μž… 쀑 ν•˜λ‚˜λ§Œ ν•΄λ‹Ήλ˜λ©΄ ν• λ‹Ή κ°€λŠ₯
let a: string | number | boolean;
a = 1;
a = "hello";
a = true;

// λ°°μ—΄μ—μ„œμ˜ Union μ˜ˆμ‹œ
let arr: (number | string | boolean)[] = [1, "hello", true];

// 객체 νƒ€μž… κ°„ Union μ˜ˆμ‹œ
type Dog = {
    name: string;
    color: string;
};

type Person = {
    name: string;
    language: string;
};

type Union1 = Dog | Person

let union1: Union1 = { name: "", color: "" };               // Dog νƒ€μž… 객체
let union2: Union1 = { name: "", language: "" };            // Person νƒ€μž… 객체
let union3: Union1 = { name: "", color: "", language: "" }; // Dog + Person ꡬ쑰도 ν—ˆμš©
// let union4: Union1 = { name: "" }; // Dog도 Person도 μ•„λ‹˜ → 였λ₯˜

// 2. ꡐ집합 - Intersection νƒ€μž…
// κΈ°λ³Έ νƒ€μž… κ°„μ—λŠ” κ³΅ν†΅λœ 뢀뢄이 μ—†μ–΄ never둜 좔둠됨
let variable: number & string; // μ‘΄μž¬ν•  수 μ—†λŠ” νƒ€μž… → 였λ₯˜

// 객체 νƒ€μž… κ°„ Intersection μ˜ˆμ‹œ
type Intersection = Dog & Person;

// 두 νƒ€μž…μ˜ λͺ¨λ“  속성을 포함해야 함
let intersection: Intersection = {
    name: "",
    color: "",
    language: "",
};

 

πŸ“Œ νƒ€μž… μΆ”λ‘ 

// βœ… νƒ€μž… μΆ”λ‘  (Type Inference)
// νƒ€μž…μŠ€ν¬λ¦½νŠΈλŠ” νƒ€μž…μ΄ λͺ…μ‹œλ˜μ§€ μ•Šμ€ λ³€μˆ˜λ‚˜ ν‘œν˜„μ‹μ˜ νƒ€μž…μ„ μžλ™μœΌλ‘œ 좔둠함
// 덕뢄에 λͺ¨λ“  λ³€μˆ˜μ— νƒ€μž…μ„ 직접 μž‘μ„±ν•˜μ§€ μ•Šμ•„λ„ μ½”λ“œλ₯Ό μž‘μ„±ν•  수 있음

// 1. λ³€μˆ˜ μ„ μ–Έ μ‹œ μ΄ˆκΈ°κ°’μ„ 톡해 νƒ€μž… μΆ”λ‘ 
let a = 10; // νƒ€μž…μ€ number둜 좔둠됨
let b = "hello"; // νƒ€μž…μ€ string으둜 좔둠됨
let c = {
    id: 1,
    name: "κ°•μ—°μˆ˜",
    profile: {
        nickname: "κ°•μˆ˜",
    },
    urls: ["https://isliife2.tistory.com/"],
};

// 2. ꡬ쑰 λΆ„ν•΄ 할당도 μΆ”λ‘  κ°€λŠ₯
let { id, name, profile, urls } = c;
let [one, two, three] = [1, "hello", true];

// 3. ν•¨μˆ˜ λ°˜ν™˜κ°’κ³Ό 기본값이 μžˆλŠ” λ§€κ°œλ³€μˆ˜λ„ 좔둠됨
function func(message = "hello") { // message: string으둜 μΆ”λ‘ 
    return "hello"; // λ°˜ν™˜ νƒ€μž…μ€ string으둜 좔둠됨
}

// 4. μ•”μ‹œμ  any (Implicit any)
// νƒ€μž… 없이 μ„ μ–Έλ§Œ ν•˜κ³  μ΄ˆκΈ°κ°’μ΄ μ—†μœΌλ©΄ → μ•”μ‹œμ μœΌλ‘œ any νƒ€μž…
// 이후 ν• λ‹Ήλœ 값에 따라 νƒ€μž…μ΄ 변경됨 ("any의 μ§„ν™”"라고 함)
let d;  // μ΄ˆκΈ°μ—λŠ” any둜 μΆ”λ‘ 
d = 10; // 이후엔 number처럼 λ™μž‘
d.toFixed();
d = "hello"; // 이후엔 string처럼 λ™μž‘
d.toLowerCase();
// d.toFixed(); // ν˜„μž¬ dλŠ” string νƒ€μž…μ΄λ―€λ‘œ 였λ₯˜

// 5. const둜 μ„ μ–Έν•œ λ³€μˆ˜μ˜ νƒ€μž… μΆ”λ‘ 
const num = 10;      // νƒ€μž…μ€ 10 (number λ¦¬ν„°λŸ΄ νƒ€μž…)
const str = "hello"; // νƒ€μž…μ€ "hello" (string λ¦¬ν„°λŸ΄ νƒ€μž…)

// 6. λ°°μ—΄μ˜ νƒ€μž… μΆ”λ‘ 
let arr = [1, "string"]; // (number | string)[] 으둜 좔둠됨 (졜적 곡톡 νƒ€μž…)

 

πŸ“Œ νƒ€μž… 단언

// βœ… νƒ€μž… 단언 (Type Assertion)
// νƒ€μž…μŠ€ν¬λ¦½νŠΈκ°€ μΆ”λ‘ ν•œ νƒ€μž…μ΄ μ•„λ‹Œ, ν”„λ‘œκ·Έλž˜λ¨Έκ°€ μ§€μ •ν•œ νƒ€μž…μœΌλ‘œ "단언"ν•˜λŠ” 문법 (문법: κ°’ as νƒ€μž…)
type Person = {
    name: string;
    age: number;
};

let person = {} as Person; // 빈 객체λ₯Ό Person νƒ€μž…μœΌλ‘œ 단언
person.name = "κ°•μ—°μˆ˜";
person.age = 24;

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

let dog = {
    name: "강말리",
    color: "white",
    breed: "λ§ν‹°μ¦ˆ", // 초과 ν”„λ‘œνΌν‹°μ§€λ§Œ 단언을 톡해 λ¬΄μ‹œ κ°€λŠ₯
} as Dog;

// βœ… νƒ€μž… 단언 κ·œμΉ™
// A as B → Aκ°€ B의 μŠˆνΌνƒ€μž…μ΄κ±°λ‚˜ μ„œλΈŒνƒ€μž…μΌ λ•Œλ§Œ κ°€λŠ₯
let num1 = 10 as never; // numberλŠ” never의 μŠˆνΌνƒ€μž…
let num2 = 10 as unknown; // numberλŠ” unknown의 μ„œλΈŒνƒ€μž…
// let num3 = 10 as string; // number와 string은 κ΄€λ ¨ μ—†μŒ → 였λ₯˜

// βœ… const 단언
// 값을 λ¦¬ν„°λŸ΄ νƒ€μž… λ˜λŠ” readonly ν”„λ‘œνΌν‹°λ‘œ κ³ μ •μ‹œν‚΄
let num4 = 10 as const; // νƒ€μž…: 10 (λ¦¬ν„°λŸ΄ νƒ€μž…)
let cat = {
    name: "μ•Όμ˜Ήμ΄",
    color: "yellow",
} as const; // λͺ¨λ“  ν”„λ‘œνΌν‹°κ°€ readonly + λ¦¬ν„°λŸ΄ νƒ€μž…μœΌλ‘œ 고정됨

// βœ… Non Null 단언
// 값이 null λ˜λŠ” undefinedκ°€ μ•„λ‹˜μ„ 단언
type Post = {
    title: string;
    author?: string;
};

let post: Post = {
    title: "κ²Œμ‹œκΈ€ 1",
    author: "κ°•μ—°μˆ˜",
}

const len: number = post.author!.length; // !λ₯Ό 뢙이면 "null/undefined μ•„λ‹˜"으둜 단언

 

πŸ“Œ νƒ€μž… 쒁히기

// βœ… νƒ€μž… 쒁히기 (Type Narrowing)
// ν•˜λ‚˜μ˜ 넓은 νƒ€μž…(μœ λ‹ˆμ˜¨ λ“±)을 쑰건문 등을 톡해 더 ꡬ체적인 νƒ€μž…μœΌλ‘œ "μ’ν˜€μ„œ" μ‚¬μš©ν•˜λŠ” 방법
// typeof, instanceof, in μ—°μ‚°μžλ₯Ό ν™œμš©ν•΄ νƒ€μž…μ„ 쒁힐 수 있음
type Person = {
    name: string;
    age: number;
}

function func(value: number | string | Date | null | Person) {
    // value.toFixed();
    // value.toUpperCase();

    if (typeof value === "number") { // βœ… νƒ€μž… κ°€λ“œ μ‚¬μš©: typeof
        console.log(value.toFixed());
    } else if (typeof value === "string") { // βœ… νƒ€μž… κ°€λ“œ μ‚¬μš©: typeof
        console.log(value.toUpperCase());
    } else if (value instanceof Date) { // βœ… νƒ€μž… κ°€λ“œ μ‚¬μš©: instanceof (λ‚΄μž₯ ν΄λž˜μŠ€μ—λ§Œ μ‚¬μš© κ°€λŠ₯)
        console.log(value.getTime());
    } else if (value && "age" in value) { // βœ… νƒ€μž… κ°€λ“œ μ‚¬μš©: in (μ‚¬μš©μž μ •μ˜ νƒ€μž… 확인에 유용)
        console.log(`${value.name}은 ${value.age}μ‚΄ μž…λ‹ˆλ‹€`);
    }
}

 

πŸ“Œ μ„œλ‘œμ†Œ μœ λ‹ˆμ˜¨ νƒ€μž…

// βœ… μ„œλ‘œμ†Œ μœ λ‹ˆμ˜¨ νƒ€μž… (Discriminated Union)
// μ„œλ‘œ κ²ΉμΉ˜μ§€ μ•ŠλŠ” (ꡐ집합이 μ—†λŠ”) νƒ€μž…λ“€λ‘œ 이루어진 μœ λ‹ˆμ˜¨ νƒ€μž…
// 각 νƒ€μž…μ„ ꡬ뢄할 수 μžˆλŠ” κ³ μœ ν•œ λ¦¬ν„°λŸ΄ κ°’(tag, state λ“±)을 ν¬ν•¨ν•˜λŠ” 것이 νŠΉμ§•

// 1. μœ μ € μ—­ν•  μ˜ˆμ‹œ
type Admin = {
    tag: "ADMIN";
    name: string;
    kickCount: number;
};

type Member = {
    tag: "MEMBER";
    name: string;
    point: number;
};

type Guest = {
    tag: "GUEST";
    name: string;
    visitCount: number;
};

// μ„œλ‘œμ†Œ μœ λ‹ˆμ˜¨ νƒ€μž…: 곡톡 ν•„λ“œ(tag)λ₯Ό κΈ°μ€€μœΌλ‘œ νƒ€μž…μ„ μ•ˆμ „ν•˜κ²Œ ꡬ뢄할 수 있음
type User = Admin | Member | Guest;

function login(user: User) {
    switch (user.tag) {
        case "ADMIN": {
            console.log(`${user.name}λ‹˜ ν˜„μž¬κΉŒμ§€ ${user.kickCount}λͺ… κ°•ν‡΄ν–ˆμŠ΅λ‹ˆλ‹€.`);
            break;
        }
        case "MEMBER": {
            console.log(`${user.name}λ‹˜ ν˜„μž¬κΉŒμ§€ ${user.point}점 λͺ¨μ•˜μŠ΅λ‹ˆλ‹€.`);
            break;
        }
        case "GUEST": {
            console.log(`${user.name}λ‹˜ ν˜„μž¬κΉŒμ§€ ${user.visitCount}번 λ°©λ¬Έν•˜μ…¨μŠ΅λ‹ˆλ‹€.`);
            break;
        }
    }
}

// 2. 비동기 μž‘μ—… 처리 μ˜ˆμ‹œ
type LoadingTask = {
    state: "LOADING";
};

type FailedTask = {
    state: "FAILED";
    error: {
        message: string;
    };
};

type SuccessTask = {
    state: "SUCCESS";
    response: {
        data: string;
    };
}

// 곡톡 ν”„λ‘œνΌν‹°μΈ stateλ₯Ό κΈ°μ€€μœΌλ‘œ ꡬ뢄 κ°€λŠ₯ν•œ μ„œλ‘œμ†Œ μœ λ‹ˆμ˜¨ νƒ€μž…
type AsyncTask = LoadingTask | FailedTask | SuccessTask;

function processResult(task: AsyncTask) {
    switch (task.state) {
        case "LOADING": {
            console.log("λ‘œλ”© 쀑");
            break;
        }
        case "FAILED": {
            console.log(`μ—λŸ¬ λ°œμƒ: ${task.error.message}`);
            break;
        }
        case "SUCCESS": {
            console.log(`성곡: ${task.response.data}`);
            break;
        }
    }
}

 

⬇️ λ‹€μŒ λ‚΄μš©μ€ μ•„λž˜ 글을 μ°Έκ³ 

 

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

λ‘œλ“œλ§΅ 링크 : https://link.onebitefe.com/r/5cdagwμ‹œλ¦¬μ¦ˆ κ°•μ˜ 링크> ν•œ μž… 크기둜 μž˜λΌλ¨ΉλŠ” λ¦¬μ•‘νŠΈ :https://i" data-og-host="www.inflearn.com" data-og-source-url="https://www.inflearn.com/course/%ED%95%9C%EC%9E%85-%ED%81%AC%EA%B8%B0-%E

isliife2.tistory.com

 

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

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

μΈν”„λŸ° κ°•μ˜ - ν•œ μž… 크기둜 μž˜λΌλ¨ΉλŠ” νƒ€μž…μŠ€ν¬λ¦½νŠΈ (클래슀)  (0) 2025.06.11
μΈν”„λŸ° κ°•μ˜ - ν•œ μž… 크기둜 μž˜λΌλ¨ΉλŠ” νƒ€μž…μŠ€ν¬λ¦½νŠΈ (μΈν„°νŽ˜μ΄μŠ€)  (0) 2025.06.11
μΈν”„λŸ° κ°•μ˜ - ν•œ μž… 크기둜 μž˜λΌλ¨ΉλŠ” νƒ€μž…μŠ€ν¬λ¦½νŠΈ (ν•¨μˆ˜μ™€ νƒ€μž…)  (0) 2025.06.11
μΈν”„λŸ° κ°•μ˜ - ν•œ μž… 크기둜 μž˜λΌλ¨ΉλŠ” νƒ€μž…μŠ€ν¬λ¦½νŠΈ (νƒ€μž…μŠ€ν¬λ¦½νŠΈ κΈ°λ³Έ)  (0) 2025.06.08
μΈν”„λŸ° κ°•μ˜ - ν•œ μž… 크기둜 μž˜λΌλ¨ΉλŠ” νƒ€μž…μŠ€ν¬λ¦½νŠΈ (κ°•μ˜ μ†Œκ°œ 및 νƒ€μž…μŠ€ν¬λ¦½νŠΈ 개둠)  (0) 2025.06.07
'πŸ“‚ Program Language Study/πŸ“„ TypeScript 곡뢀' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • μΈν”„λŸ° κ°•μ˜ - ν•œ μž… 크기둜 μž˜λΌλ¨ΉλŠ” νƒ€μž…μŠ€ν¬λ¦½νŠΈ (μΈν„°νŽ˜μ΄μŠ€)
  • μΈν”„λŸ° κ°•μ˜ - ν•œ μž… 크기둜 μž˜λΌλ¨ΉλŠ” νƒ€μž…μŠ€ν¬λ¦½νŠΈ (ν•¨μˆ˜μ™€ νƒ€μž…)
  • μΈν”„λŸ° κ°•μ˜ - ν•œ μž… 크기둜 μž˜λΌλ¨ΉλŠ” νƒ€μž…μŠ€ν¬λ¦½νŠΈ (νƒ€μž…μŠ€ν¬λ¦½νŠΈ κΈ°λ³Έ)
  • μΈν”„λŸ° κ°•μ˜ - ν•œ μž… 크기둜 μž˜λΌλ¨ΉλŠ” νƒ€μž…μŠ€ν¬λ¦½νŠΈ (κ°•μ˜ μ†Œκ°œ 및 νƒ€μž…μŠ€ν¬λ¦½νŠΈ 개둠)
YeonSu02
YeonSu02
Email : rkddustn2519@naver.com
  • YeonSu02
    IsLiife2
    YeonSu02
  • 전체
    였늘
    μ–΄μ œ
    • λΆ„λ₯˜ 전체보기
      • πŸ“‚ 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
        • πŸ“„ Git
        • πŸ“„ Docker
        • πŸ“„ Jenkins
        • πŸ“„ Firebase
        • πŸ“„ License
      • πŸ“‚ Experience
  • λΈ”λ‘œκ·Έ 메뉴

    • ν™ˆ
  • 링크

    • GitHub
  • 곡지사항

  • 인기 κΈ€

  • νƒœκ·Έ

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

  • 졜근 κΈ€

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

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