👶 TypeScript

고급 함수 타입들 - 튜플의 타입 추론 개선

2023. 1. 20. 16:00
목차
  1. 튜플의 타입 추론 개선
반응형

튜플의 타입 추론 개선

TypeScript는 튜플을 선언할 때 튜플의 타입에 관대한 편입니다.

 

튜플의 길이, 그리고 어떤 위치에 어떤 타입이 들어있는지는 무시하고 주어진 상황에서 제공할 수 있는 가장 일반적인 타입으로 튜플의 타입을 추론합니다.

let a = [4, false] // let a: (number | boolean)[]

하지만 때로는 조금 더 엄격한 추론이 필요한데, 예를 들어 앞 예에서 a를 배열이 아니라 고정된 길이의 튜플로 취급하고 싶을 수 있습니다.

 

물론 타입 어서션을 이용해 튜플을 튜플 타입으로 형변환할 수 있습니다.

 

또는 as const 어서션을 이용해 튜플의 타입을 가능한 한 좁게 추론하는 동시에 읽기 전용으로 만들 수 있습니다.

 

타입 어서션을 사용하지 않고 추론 범위도 좁히지도 않고, 그리고 읽기 전용 한정자를 추가하는 as const도 사용하지 않으면서 튜플을 튜플 타입으로 만들려면 어떻게 해야 할까요?

 

TypeScript가 나머지 매개변수의 타입을 추론하는 기법을 이용하면 됩니다.

function tuple< // ①
  T extends unknown[] // ②
>(
  ...ts: T // ③
): T { // ④
  return ts // ⑤
}

let a = tuple(4, false) // let a: [number, boolean]
  1. 튜플 타입을 만드는 데 사용할 tuple 함수를 선언합니다. (내장 문법 [] 대신 사용합니다.)
  2. unknown[]의 서브 타입인 단일 타입 매개변수 T를 선언합니다. (T는 모든 종류의 타입을 담을 수 있는 배열임을 의미합니다.)
  3. tuple은 임의 개수의 매개변수 ts를 받습니다. T는 나머지 매개변수를 나타내므로 TypeScript는 이를 튜플 타입으로 추론합니다.
  4. tuple 함수는 ts의 추론 타입과 같은 튜플 타입의 값을 반환합니다.
  5. 함수는 우리가 전달한 인수를 그대로 반환합니다. 모든 마법은 타입과 관련해서 이루어집니다.

튜플 타입이 많이 등장하는 코드라면 이 기법을 활용해 타입 어서션 사용을 줄일 수 있습니다.

반응형

'👶 TypeScript' 카테고리의 다른 글

조건부 타입  (0) 2023.01.21
고급 함수 타입들 - 사용자 정의 타입 안전 장치  (0) 2023.01.20
컴패니언 객체 패턴(companion object pattern)  (0) 2023.01.20
매핑된 타입(mapped type)  (0) 2023.01.20
Record 타입  (0) 2023.01.20
  1. 튜플의 타입 추론 개선
'👶 TypeScript' 카테고리의 다른 글
  • 조건부 타입
  • 고급 함수 타입들 - 사용자 정의 타입 안전 장치
  • 컴패니언 객체 패턴(companion object pattern)
  • 매핑된 타입(mapped type)
개발자 린다씨
개발자 린다씨
개발자 린다씨
개발자 린다씨
Cozy_Linda
개발자 린다씨
전체
오늘
어제
  • 분류 전체보기 (220)
    • 🧠 LLM 엔지니어링 (16)
    • 🐣 일하면서 공부하기 (26)
    • 👶 TypeScript (101)
    • 😎 STS3 Spring 쇼핑몰 (68)
      • STS3 Spring 환경 설정 👀 (5)
    • 🥴 SQLD (5)
    • 🍀 Tistory 팁 (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

최근 댓글

최근 글

hELLO · Designed By 정상우.
개발자 린다씨
고급 함수 타입들 - 튜플의 타입 추론 개선
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.