• 티스토리 홈
  • 프로필사진
    루루개발자
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
루루개발자
  • 프로필사진
    루루개발자
    • 분류 전체보기 (213)
      • react & next.js (13)
      • Node.js & Javascript & Type.. (24)
        • d3.js (10)
      • 차트 만들기 (1)
      • 티스토리 스킨 개발 (7)
      • 내가 만든 패키지 (3)
      • 내가 만든 CSS (1)
      • CSS (7)
      • 도커 & 쿠버네티스 (3)
      • 개인 프로젝트 (7)
      • 리뷰 & 추천 (2)
      • 알고리즘 (1)
      • IT 기타 (18)
      • 잡동사니 (1)
      • Spring Boot (5)
      • 취미로 그리는 그림들 (120)
      • 개인적인 생각들 (0)
  • 반응형
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • 타입 가드와 타입 축소에 대하여
        2023년 02월 08일
        • 루루개발자
        • 작성자
        • 2023.02.08.:41
        반응형

        안녕하세요! 최근에 타입 가드와 타입 축소에 대한 용어를 처음 들어봐서

        해당 용어에 대해 알아보려고 합니다.

         

        타입 가드

        타입 가드(Type Guard)는 컴파일러가 타입을 예측할 수 있도록 타입의 범위를 축소시켜 주는 것을 의미합니다.

         

        타입 축소

        말 그대로 타입의 범위를 축소하는 것을 의미합니다. 즉, 타입 가드를 해주기 위해 타입 축소를 하는 거라고 말할 수 있습니다.

         

        타입 가드 적용 방법

        타입 가드를 적용하는 방법은 다음과 같이 여러가지 방법이 있습니다.

        1. typeof

        function test(value) {
        	if (typeof value !== 'string') {
            	return;
            }
            
            // 여기부터는 value 를 string type 으로 확정 인식!
        }

        위 코드와 같이 typeof 를 통해 확인한 타입이 내가 원하는 타입이 아니면 리턴을 시키고, 만약 맞다면 그 이후 코드에서는 내가 원하는 타입으로 컴파일러가 확정적으로 인식하게 됩니다.

         

        2. instanceof

        class Car {
          brand: string;
          isAuto: boolean;
        }
        
        class Phone {
          brand: string;
          series: 'basic' | 'plus' | 'ultra';
        }
        
        function test(target: Car | Phone): void {
        	if (target instanceof Car) {
            	// 여기서 target 은 Car type 으로 확정 인식!
                return;
            } 
            
            if (target instanceof Phone) {
            	// 여기서 target 은 Phone type 으로 확정 인식!
                return;
            }
           
        	return;
        }

        위 코드와 같이 instaceof 를 활용하여 특정 객체가 특정 클래스에 속하는지 판별하여 타입을 축소해 줄 수 있습니다.

         

        3. is

        function isString(value: any): value is string {
            return typeof value === 'string';
        }

        is 는 typescript 에서 지원하고 있는 키워드이며, 특정 타입을 체크하는 함수에서 반환되는 값이 true 이면 해당 함수를 사용하는 블록 안에서도 인자로 받은 값의 타입을 특정 타입으로 확정시켜 줄 수 있도록 하는 기능을 합니다. 원래 특정 변수를 함수로 넘겨서 타입을 체크하게 되면 그 함수를 사용하고 있는 스코프에서는 타입 축소가 안되어 불편했었는데, 이 is 키워드를 활용하면 그 부분을 해결 할 수 있을 것 같네요.

         

        참고 사이트

        https://chanhuiseok.github.io/posts/ts-2/

         

        [TypeScript] 타입스크립트 Type Guard 및 타입을 좁혀나가는 여러가지 방법

        타입스크립트 type guards로 타입 좁히기

        chanhuiseok.github.io

        https://chinsun9.github.io/2021/12/22/typescript-is-keyword/

         

        typescript is keyword

        12345function isValidPostAttributes( attributes: any): attributes is PostMarkdownAttributes { return attributes?.title;} remix 튜토리얼하다가 요상한 문법을 보았다 any같은 . 찍으면 자동완성 안뜨는 타입들을 특정

        chinsun9.github.io

         

        반응형

        'Node.js & Javascript & Typescript' 카테고리의 다른 글

        javascript 에서 aes256 암호화, 복호화 하기  (1) 2023.07.26
        호이스팅 (hoisting) (2)  (0) 2023.07.22
        package.json 의 버전 표기법 (npm)  (0) 2022.12.24
        Node.js 16.15.1 설치시 npm 에서 "config global `--global`, `--local` are deprecated" 경고 발생 현상  (0) 2022.06.21
        클로저(Closure)에 대해 알아봅시다.  (0) 2022.06.11
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바