[TypeScript] 타입 가드 (Type Guard)

2024. 11. 15. 00:23·TypeScript
728x90
728x90

타입 가드 (Type Guard)

  - 변수가 여러 개의 타입으로 지정되어 있을 때, 특정 조건을 기반으로 변수의 타입 범위를 좁히는 기법

  - 코드 흐름에 따라 타입을 좁혀서 특정 타입에 대한 처리를 더 정확하게 할 수 있도록 함  

 

 


# typeof 연산자

  - 기본 자료형 확인

     ex) string, number, boolean, object, ...

function example(x: number | string) {
    if (typeof x === "string") {
        // 여기서 x는 string 타입으로 좁혀지며, string 타입 관련 함수가 자동완성됨
        console.log(x.toUpperCase());
    }
}

# instanceof 연산자

  - 객체가 특정 클래스의 인스턴스인지 확인

class Dog {
    bark() {
        console.log("Woof!");
    }
}

class Cat {
    meow() {
        console.log("Meow!");
    }
}

function speak(animal: Dog | Cat) {
    if (animal instanceof Dog) {
        // 여기서 animal은 Dog 타입으로 좁혀짐
        animal.bark();
    }
}

# in 연산자

  - 객체가 특정 프로퍼티를 가지고 있는지 확인

interface Dog {
    bark: () => void;
}

interface Cat {
    meow: () => void;
}

function speak(animal: Dog | Cat) {
    if ("bark" in animal) {
        // 여기서 animal은 Dog 타입으로 좁혀짐
        animal.bark();
    }
}

 

# 사용자 정의 타입 가드 함수 (is 연산자 활용)

// return 값이 true이면 value는 string 타입으로 좁혀짐
function isString(value: number | string): value is string {
    return typeof value === "string";
}

function example(x: number | string) {
    if (isString(x)) {
        // 여기서 x는 string 타입으로 좁혀짐
        console.log(x.toUpperCase());
    }
}

 


구별된 유니언 타입 (Discriminated Union Type)

  - 공통의 식별자 프로퍼티를 통해, 유니언 타입으로 묶인 각 타입들을 구별할 수 있도록 함

interface Dog {
    type: "dog";  // 식별자
    bark(): void;
}

interface Cat {
    type: "cat";  // 식별자
    meow(): void;
}

type Animal = Dog | Cat;

function speak(animal: Animal) {
    if (animal.type === "dog") {
        // animal은 Dog 타입으로 좁혀짐
        animal.bark();
    } else {
        // animal은 Cat 타입으로 좁혀짐
        animal.meow();
    }
}
320x100
반응형
저작자표시 비영리 변경금지 (새창열림)

'TypeScript' 카테고리의 다른 글

[TypeScript] 타입 추론 (Type Inference) & 타입 단언 (Type Assertion)  (0) 2024.11.12
[TypeScript] 타입 별칭 (Type Alias)  (0) 2024.11.10
[TypeScript] 유니언 타입 & 인터섹션 타입  (0) 2024.11.09
[TypeScript] 인터페이스 (Interface)  (0) 2024.11.08
[TypeScript] 기본 타입  (4) 2024.11.07
'TypeScript' 카테고리의 다른 글
  • [TypeScript] 타입 추론 (Type Inference) & 타입 단언 (Type Assertion)
  • [TypeScript] 타입 별칭 (Type Alias)
  • [TypeScript] 유니언 타입 & 인터섹션 타입
  • [TypeScript] 인터페이스 (Interface)
스응
스응
    반응형
    250x250
  • 스응
    이서영의 개발 블로그
    스응
  • 전체
    오늘
    어제
  • 글쓰기 관리
    • 분류 전체보기 (385)
      • Java (134)
        • Base (54)
        • Spring Boot (37)
        • JSP (16)
        • Swing (GUI) (20)
        • Design Pattern (7)
      • C# (13)
      • PHP (18)
      • SQL (27)
      • Vue.js (9)
      • Tailwind CSS (4)
      • TypeScript (7)
      • HTML & CSS (27)
      • JavaScript (26)
      • jQuery (10)
      • Android (3)
      • - - - - - - - - - - - - - - (0)
      • Hotkeys (5)
      • CS (30)
      • IT Notes (13)
      • Error Notes (17)
      • Team Project (24)
        • Airlines Web Project (12)
        • University Web Project (6)
        • Strikers 1945 GUI Project (6)
      • My Project (18)
        • Library Web Project (8)
        • Pet Shopping Mall GUI Project (10)
      • etc. (0)
  • 블로그 메뉴

    • Home
    • Write
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    git
    C#
    Android
    CSS
    면접
    vuejs
    개발일지
    SQL
    errorNote
    cs
    SEO
    js
    jQuery
    Swing
    SpringBoot
    php
    Wordpress
    SWAGGER
    typeScript
    jsp
    zapier
    tailwindcss
    티스토리챌린지
    Codeigniter
    java
    오블완
    HTML
    http
    Hotkeys
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
스응
[TypeScript] 타입 가드 (Type Guard)
상단으로

티스토리툴바