[한 입 크기로 잘라먹는 TypeScript] CH3. 타입스크립트 이해하기 1(1. 타입은 집합이다, 2. 타입 계층도와 함께 기본타입 살펴보기)

2024. 4. 15. 11:58·웹 프로그래밍/JavaScript | TypeScript
반응형

chapter 3. 타입스크립트 이해하기

0. 타입스크립트를 이해한다는 것은?

타입스크립트가 어떤 기준으로 타입을 정의하고, 어떤 기준으로 타입들 간 관계를 정의하고, 어떤 기준으로 타입스크립트 코드의 오류를 검사하는지 그 원리와 동작 방식을 이해하는 것.

 

1. 타입은 집합이다

타입스크립트의 '타입'은 여러 개의 값을 포함하는 '집합'이다.

집합: 동일한 속성을 갖는 요소들을 하나의 그룹으로 묶은 단위

타입스크립트의 모든 타입들은 집합으로써 서로 포함하고 포함되는 관계를 갖는다.

이런 관계에서 다른 타입을 포함하는 타입을 슈퍼 타입(부모 타입)이라 부르며, 반대는 서브 타입(자식 타입)이라고 한다.

타입 간의 이러한 계층 관계를 어떻게 이용할 수 있는지 살펴보는 것이 중요하다.

 

✅ 타입 호환성

A와 B 두 개의 타입이 존재할 때, A 타입의 값을 B 타입으로 취급해도 괜찮은지 판단하는 것

- 만약 A 타입 값이 B 타입 값으로 취급되어도 괜찮다면 호환된다라 표현하고 안 된다면 호환되지 않는다고 한다.

Number 타입이 Number 리터럴 타입의 슈퍼 타입이므로, Number 리터럴 타입을 Number 타입으로 취급하는 것은 가능하나 Number를 Number 리터럴 타입으로 취급할 수는 없다.

업 캐스팅: 서브 타입의 값을 슈퍼 타입의 값으로 취급하는 것. 모든 상황에 가능

다운 캐스팅: 업 캐스팅의 반대. 대부분의 상황에 불가능

 

 

2. 타입 계층도와 함께 기본타입 살펴보기

타입 계층도

✅ unknown 타입 (전체 집합)

  • 타입 계층도의 최상단에 위치 👉 unknown 타입은 모든 타입의 슈퍼 타입 / 반면 모든 타입은 unknown의 부분 집합
  • 따라서 unknown 타입 변수에는 모든 타입의 값을 할당할 수 있다 👉 모든 타입은 unknown 타입으로 업 캐스트 할 수 있다
let a: unknown = 1;                 // number -> unknown
let b: unknown = "hello";           // string -> unknown
let c: unknown = true;              // boolean -> unknown
let d: unknown = null;              // null -> unknown
let e: unknown = undefined;         // undefined -> unknown
let f: unknown = [];                // Array -> unknown
let g: unknown = {};                // Object -> unknown
let h: unknown = () => {};          // Function -> unknown
  • 다운 캐스트는 예외적인 경우가 아니면 허용되지 않는다 👉 unknown 타입의 값은 any를 제외한 어떤 타입의 변수에도 할당할 수 없다.
let unknownValue: unknown;

let a: number = unknownValue;
// 오류 : unknown 타입은 number 타입에 할당할 수 없습니다.

 

✅ never 타입 (공집합)

  • 타입 계층도 최하단에 위치
  • never 타입은 불가능, 모순을 의미하는 타입. 👉 공집합(아무것도 포함하지 않는 집합)을 뜻하는 타입
  • 공집합은 모든 집합의 부분 집합. 즉, never 타입은 모든 타입의 서브 타입. 👉 따라서 never 타입은 모든 타입으로 업 캐스팅 가능
let neverVar: never;

let a: number = neverVar;            // never -> number
let b: string = neverVar;            // never -> string
let c: boolean = neverVar;           // never -> boolean
let d: null = neverVar;              // never -> null
let e: undefined = neverVar;         // never -> undefined
let f: [] = neverVar;                // never -> Array
let g: {} = neverVar;                // never -> Object
  • 반면 어떤 타입도 never 타입으로 다운 캐스팅 할 수 없다.
let a: never = 1;                 // number -> never ❌
let b: never = "hello";           // string -> never ❌
let c: never = true;              // boolean -> never ❌
let d: never = null;              // null -> never ❌
let e: never = undefined;         // undefined -> never ❌
let f: never = [];                // Array -> never ❌
let g: never = {};                // Object -> never ❌

 

✅ void 타입

  • 아무것도 반환하지 않는 함수의 반환값 타입으로 주로 사용된다
  • void 타입은 undefined 타입의 슈퍼타입 👉 따라서 반환값을 void로 선언한 함수에서 undefined를 반환해도 오류가 발생하지 않는다. undefined 타입은 void 타입의 서브 타입이므로 업 캐스팅이 가능하기 때문.
function noReturnFuncA(): void {
  return undefined;
}
  • void 타입의 서브 타입: undefined 타입, never 타입 👉 따라서 void 타입에는 undefined, never 이외에 다른 타입의 값을 할당할 수 없다.
let voidVar: void;

voidVar = undefined; // undefined -> void (ok)

let neverVar: never;
voidVar = neverVar; // never -> void (ok)

 

✅ any 타입 (치트키)

  • 사실상 타입 계층도를 완전히 무시하는 치트키 같은 타입
  • 모든 타입의 슈퍼 타입이 될 수도 있고 모든 타입의 서브 타입이 될 수도 있다.
  • 모든 타입으로의 다운 캐스팅, 업 캐스팅이 가능하다.

 


출처

 

소개 - 한 입 크기로 잘라먹는 타입스크립트

한 입 크기로 잘라먹는 타입스크립트

ts.winterlood.com

 

한 입 크기로 잘라먹는 타입스크립트(TypeScript) | 이정환 Winterlood - 인프런

이정환 Winterlood | 문법을 넘어 동작 원리와 개념 이해까지 배워도 배워도 헷갈리는 타입스크립트 이제 제대로 배워보세요! 여러분을 타입스크립트 마법사🧙🏻‍♀️로 만들어드립니다., 프론

www.inflearn.com

 

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'웹 프로그래밍 > JavaScript | TypeScript' 카테고리의 다른 글

[한 입 크기로 잘라먹는 TypeScript] CH2. 타입스크립트 기본 3(6.any와 unknown, 7.void와 never)  (0) 2024.04.11
[한 입 크기로 잘라먹는 TypeScript] CH2. 타입스크립트 기본 2(3.객체, 4.타입 별칭과 인덱스 시그니쳐, 5.열거형 타입)  (1) 2024.04.10
[한 입 크기로 잘라먹는 TypeScript] CH2. 타입스크립트 기본 1(0. 기본타입의 정의, 1.원시타입과 리터럴타입, 2.배열과 튜플)  (0) 2024.04.05
[한 입 크기로 잘라먹는 TypeScript] CH1. 타입스크립트 개론 2(2. TS 동작원리, 3. 설치와 실습, 4. 컴파일러 옵션 설정하기)  (0) 2024.04.03
[한 입 크기로 잘라먹는 TypeScript] CH1. 타입스크립트 개론 1(0. 타입스크립트 소개, 1. JS 단점/TS 장점)  (1) 2024.04.02
[모던 자바스크립트 Deep Dive] 12장. 함수1 (12.1. 함수란? ~ 12.4. 함수 정의)  (1) 2024.03.29
'웹 프로그래밍/JavaScript | TypeScript' 카테고리의 다른 글
  • [한 입 크기로 잘라먹는 TypeScript] CH2. 타입스크립트 기본 3(6.any와 unknown, 7.void와 never)
  • [한 입 크기로 잘라먹는 TypeScript] CH2. 타입스크립트 기본 2(3.객체, 4.타입 별칭과 인덱스 시그니쳐, 5.열거형 타입)
  • [한 입 크기로 잘라먹는 TypeScript] CH2. 타입스크립트 기본 1(0. 기본타입의 정의, 1.원시타입과 리터럴타입, 2.배열과 튜플)
  • [한 입 크기로 잘라먹는 TypeScript] CH1. 타입스크립트 개론 2(2. TS 동작원리, 3. 설치와 실습, 4. 컴파일러 옵션 설정하기)
청량리 물냉면
청량리 물냉면
프로그래밍 공부를 하고 있습니다. 공부 내용 정리 겸 정보 공유를 목적으로 합니다.
    반응형
  • 청량리 물냉면
    노력중인 블로그
    청량리 물냉면
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 프로그래밍
        • Programming
        • C | C++
        • Java
        • Python
      • 웹 프로그래밍
        • HTML | CSS
        • JavaScript | TypeScript
        • React
        • Vue.js
        • Next.js
        • Spring & Spring Boot
        • JSP & Servlet
        • DB
      • 웹 프로젝트
        • 웹 프로젝트
        • 🥨스낵몰
        • 👨‍👨‍👧‍👧소셜 가계부
        • 🌜꿈 일기장
        • 🔮포트폴리오 사이트
        • 🏃‍♂️팀 프로젝트: 일정관리 프로그램
        • 📈팀 프로젝트: AI기반 주식 분석 플랫폼
        • 😺Just Meow It: 고양이의 조언
      • 앱 프로그래밍
        • Flutter
        • Kotlin
      • Problem Solving
        • 백준
        • 프로그래머스
        • SWEA
      • Computer Science
        • 알고리즘
        • 컴퓨터 네트워크
        • 이산수학
      • Developer
        • 후기
        • 자료정리
        • 취업 | 취준
        • 웹개발 교육 프로그램
        • TIL
  • 블로그 메뉴

    • 홈
    • Github
  • 공지사항

    • 프로그래밍 공부 중😊
  • 인기 글

  • 태그

    클론 프로젝트
    SWEA
    포트폴리오
    Next.js
    타입스크립트
    Jiraynor Programming
    React
    Til
    블로그 제작
    자바스크립트
    ZeroCho
    파이썬
    구현
    백준
    자바
    공식문서
    알고리즘
    뉴렉처
    플러터
    프로그래머스
    강의내용정리
    리액트
    spring boot
    프로젝트
    mysql
    bfs
    웹사이트
    d3
    컴퓨터네트워크
    AWS
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
청량리 물냉면
[한 입 크기로 잘라먹는 TypeScript] CH3. 타입스크립트 이해하기 1(1. 타입은 집합이다, 2. 타입 계층도와 함께 기본타입 살펴보기)
상단으로

티스토리툴바