[TypeScript] 타입 추론 (Type Inference) & 타입 단언 (Type Assertion)

2024. 11. 12. 01:46·TypeScript
728x90
728x90

타입 추론 (Type Inference)

  - 코드에서 명시적으로 타입을 지정하지 않아도, 컴파일러가 타입을 자동으로 추론하는 기능

 

# Best Common Type

  - 여러 타입의 값이 포함된 구조에서 가장 적절한 공통 타입을 추론하는 방식

let mixedArray = [1, 2, "hello"];  // 변수를 (string | number)[] 타입으로 추론

function getValue(condition: boolean) {
    return condition ? "hello" : 42;  // 반환 타입을 (string | number) 타입으로 추론
}

# Contextual Typing

  - 코드의 문맥을 기반으로 타입을 추론하는 방식

// window.onmousedown에 할당된 함수라는 맥락을 통해, 
// 파라미터인 e가 MouseEvent 타입으로 추론될 수 있음
window.onmousedown = function (e) {
    console.log(e.button);  // mouseEvent가 MouseEvent 타입으로 추론됨
};

# Duck Typing

  - 타입이 명시적으로 일치하지 않더라도, 해당 객체가 필요로 하는 속성/메서드를 가지고 있으면 해당 타입으로 간주하는 방식

  - 객체의 실제 타입이 아닌, '구조'를 보고 타입을 결정함

  - 용어 유래 : '만약 어떤 새가 오리처럼 걷고, 헤엄치고, 꽥꽥 소리를 낸다면 그 새를 오리라고 부를 것이다'

interface Animal {
    name: string;
    makeSound(): void;
}

let duck = {
    name: "Donald",
    makeSound: () => console.log("Quack!")
};

function sound(animal: Animal) {
    animal.makeSound();
}

// duck은 Animal의 속성/메서드를 가지고 있으므로, Animal 인터페이스를 따른다고 간주됨
sound(duck);

 


타입 단언 (Type Assertion)

  - 컴파일러에게 특정 값이 특정 타입이라고 단언하는 것

  - 타입 추론이 개발자의 의도와 다를 때, 개발자가 직접 원하는 타입을 지정하여 타입 검사를 우회할 수 있음

     → 런타임 에러가 발생할 수 있으니 유의

let someValue: any = "this is a string";
// any 타입인 someValue를 string으로 간주하여 length 속성을 사용할 수 있게 함
let strLength: number = (someValue as string).length;
interface User {
    name: string;
    age: number;
}

// 타입 단언 X
// User 인터페이스의 필수 속성을 포함하고 있지 않기 때문에 에러 발생
let test1: User = {};

// 타입 단언 O
// 에러가 발생하지 않음
let test2 = {} as User;
320x100
반응형
저작자표시 비영리 변경금지 (새창열림)

'TypeScript' 카테고리의 다른 글

[TypeScript] 타입 가드 (Type Guard)  (0) 2024.11.15
[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 Guard)
  • [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
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

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

  • hELLO· Designed By정상우.v4.10.0
스응
[TypeScript] 타입 추론 (Type Inference) & 타입 단언 (Type Assertion)
상단으로

티스토리툴바