본문으로 이동
TypeScript 타입 시스템 뜯어보기: 타입 호환성
문서

TypeScript 타입 시스템 뜯어보기: 타입 호환성

김병묵 토스 · 토스 기술 블로그

원문 보기

AI 핵심 요약

TypeScript의 구조적 서브타이핑은 필요한 프로퍼티를 갖춘 객체를 별도의 상속 선언 없이 사용할 수 있게 하지만, 추가 프로퍼티나 오타가 놓칠 수 있다는 부작용도 있다. 컴파일러의 `checker.ts`와 관련 GitHub PR을 살펴보면, 객체 리터럴을 함수에 직접 전달할 때는 fresh object로 간주해 excess property 검사를 적용하고, 변수에 담긴 객체에는 일반적인 구조적 호환성을 허용한다. 이 예외는 함수가 사용하지 않는 데이터에 대한 오해와 프로퍼티 오타를 줄이기 위한 절충안이다. 필요에 따라 index signature로 추가 프로퍼티를 허용하거나 branded type으로 호환을 제한할 수 있다.

  • TypeScript의 구조적 서브타이핑은 상속 선언보다 객체가 가진 프로퍼티를 기준으로 호환성을 판단한다.
  • 객체 리터럴을 함수에 바로 전달하면 excess property 검사가 적용되어, 대상 타입에 없는 프로퍼티나 오타를 잡아낸다.
  • 객체 리터럴을 변수에 먼저 담으면 freshness가 사라져 추가 프로퍼티가 있어도 구조적으로 호환될 수 있다.
  • 추가 프로퍼티를 허용하려면 index signature를 사용할 수 있고, 타입 간 구분을 강제하려면 branded type을 고려할 수 있다.

소개

타입호환성은 무엇이며 왜 필요할까요? 타입호환이 지원되지 않는 경우가 존재한다는 것을 아셨나요? 평소 익숙했던 개념들에 대해 질문을 던져가며 TypeScript 타입 시스템에 관해 심도있게 알아보고자 합니다.

비슷한 학습 자료

컨퍼런스 당근 밋업

타입스크립트로 개발하면서 점점 느려지는 코드 추론 속도 때문에 고민했던 적 있으신가요? 시간이 지남에 따라 코드베이스가 커졌으니 자연스러운 수순이라고 생각할 수 있어요. 그런데 혹시 잘못 작성한 타입 때문에 타입 추론이 느려지고 있었다면요? 이 세션에서는 잘못된 타입이 타입스크립트 추론 속도를 어떻게 저하시키는지 살펴보고, 타입 추론의 병목 지점을 진단하고 해결할 수 있는 방법을 소개해요. 🥕 영상을 보고 당근에 관심이 생기셨다면 채용 공고를 확인해보세요! https://about.daangn.com/jobs/

프론트엔드 프로그래밍 언어

컨퍼런스 엔지니어링데이 2025

네이버 사내 기술 교류 행사인 NAVER ENGINEERING DAY 2024(5월)에서 발표되었던 세션을 공개합니다. [발표 내용] TypeScript의 타입 추론 원리를 타입 이론과 순서론에 근거하여 학습 실전 라이브러리 개발에서 풀 법한 문제 풀이 [대상] TypeScript 고급 사용자 라이브러리 개발 / 오픈소스 참여 등을 생각하시는 분 [기초 / 고급 / 응용] 00:00 ~ 31:09 기초타입이론 32:29 ~ 46:05 고급타입추론 46:06 ~ 1:12:03 응용문제

웹 개발 프로그래밍 언어

문서 강민우

'접근성은 어려운 것' 이라고 느끼는 분들을 위해 실무에서 바로 적용할 수 있는 접근성의 핵심 개념과 실수하기 쉬운 패턴을 알려주는 문서, A11y Fundamentals 을 소개합니다.

UI/UX

문서 강선규

오늘은 토스 자체 React Native 프레임워크 Granite이 어떻게 파일 기반 라우팅의 문제를 해결했는지 소개해드릴게요.

프론트엔드 모바일 앱 개발

문서 허민

ts-pattern 라이브러리는 패턴 매칭을 기반으로 하고 있으며, 복잡한 조건부 분기를 간결하게 작성할 수 있게 도와줘요. 하지만 성능이 비교적 떨어지기 때문에 실제로 ts-pattern을 어떻게 사용하고 있는지 확인할 필요가 있습니다.

프론트엔드 프로그래밍 언어

문서 박서진

TypeScript 코드베이스의 타입 안전성을 한 단계 올려줄 수 있는 Template Literal Type의 뜻과 응용에 대해 알아봅니다.

프로그래밍 언어