개발후라이
개발후라이
개발후라이
  • 분류 전체보기 (285)
    • Web Front End (74)
      • Javascript & Typescript (26)
      • React (11)
      • Vue (4)
      • Nodejs (1)
      • HTML (6)
      • CSS (7)
      • HTTP (6)
      • 책 - Review (8)
    • TIL (0)
    • Problem Solved (135)
      • 알고리즘 (4)
      • BOJ (67)
      • Programmers (8)
      • HackerRank (33)
      • LeetCode (23)
    • 회고 (4)
      • 오늘의 회고 (16)
      • 주간 회고 (15)
      • 월간 회고 (7)
      • WakaTime (9)
    • Git (3)
    • 기타 (15)
      • 취업 (5)
      • 자격증 (1)

블로그 메뉴

  • GitHub
  • LinkedIn
  • 홈

인기 글

태그

  • 자바스크립트
  • 개발자
  • 회고
  • 오늘의회고
  • 노개북
  • 프론트엔드
  • 릿코드
  • JavaScript
  • 노마드북클럽
  • TypeScript

최근 댓글

최근 글

전체 방문자
오늘
어제

티스토리

hELLO · Designed By 정상우.
개발후라이
Web Front End/Javascript & Typescript

[Typescript Challenges] First of Array, Length of Tuple, Exclude

[Typescript Challenges] First of Array, Length of Tuple, Exclude
Web Front End/Javascript & Typescript

[Typescript Challenges] First of Array, Length of Tuple, Exclude

2022. 3. 1. 22:35
반응형

Typescript Challenges에 있는 타입스크립트 문제를 easy 단계부터 풀어 보려고 합니다. easy에서는 3문제씩 풀이와 함께 업로드합니다.

First of Array

  • https://github.com/type-challenges/type-challenges/blob/master/questions/14-easy-first/README.md
  • 문제: 배열을 generic 타입으로 입력했을 때 해당 배열의 첫 번째 요소 타입을 구현하는 문제.

1) 우선 대부분의 경우에는 T[0]로 하게 되면 배열 자신의 값으로 되기 때문에 타입이 지정이 됩니다.
2) 고려해야 할 부분은 빈 배열을 넣었을 경우입니다. 타입스크립트에서도 삼항연산자를 쓸 수 있습니다. 조건은 extends 키워드를 한정적으로 부여해 equal과 같은 효과가 나도록 하여 작성할 수 있습니다. T extends []
3) 삼항연산자를 사용하여 빈 배열일 경우([])에만 never 타입으로 지정하면 완성됩니다.

type First<T extends any[]> = T extends [] ? never : T[0]; 

Length of Tuple

  • https://github.com/type-challenges/type-challenges/blob/master/questions/18-easy-tuple-length/README.md
  • 문제: 튜플을 generic으로 넣으면 그 길이를 타입으로 구현하는 문제. 단, 배열이 아닐 경우에는 에러가 발생해야 함.

1) 예제를 보면 as const 단언으로 인해 타입이 readonly로 됩니다. 이를 이용하여 들어올 수 있는 generic 타입을 readonly로 지정해 줍니다.<T extends readonly any[]>`

2) T가 any[] 형태로 들어온다고 범위가 정해졌으므로 배열에 있는 속성을 가져다 쓸 수 있습니다. 단, 타입스크립트에서는 T.length와 같은 형태로는 작성이 되지 않습니다. T['length']와 같은 형태로 array.length 속성을 꺼내쓸 수 있습니다.

type Length<T extends readonly any[]> = T['length'];

Exclude

  • https://github.com/type-challenges/type-challenges/blob/master/questions/43-easy-exclude/README.md
  • 문제:Exclude<"a" | "b" | "c", "a">를 타입스크립트로 구현하는 문제. 이 문제의 답은 실제 Exclude가 구현되어 있는 것과 동일하여 원리에 대해 이해한 내용을 설명하겠습니다.

1) T extends U는 union으로 들어온 T 타입 (ex: "a" | "b" | "c")을 하나씩 체크하는 부분입니다. "a" extends "b", "b" extends "b",..이런 식으로 말이죠.
2) U와 타입이 같으면 never 입니다. never는 아무것도 없는 타입이기 때문에 아무것도 남지 않게 됩니다.
3) U와 타입이 다르면 T 자신을 보냅니다. MyExclude<"a" | "b" | "c", "b"> 결과가 "a" | "c" 로 나오게 됩니다.

type MyExclude<T, U> = T extends U ? never : T;
반응형
저작자표시 (새창열림)
  • First of Array
  • Length of Tuple
  • Exclude
'Web Front End/Javascript & Typescript' 카테고리의 다른 글
  • SvelteKit에는 왜 Vite가 선택되었을까? "Vite VS Snowpack"
  • [Typescript Challenges] Awaited, If, Concat
  • [Typescript Challenges] Pick, Readonly, Tuple to Object
  • [함수형 자바스크립트] Symbol, Iterator, Generator
개발후라이
개발후라이
어제보다 오늘 발전하기 위한 공간 https://github.com/choisohyun

티스토리툴바

개인정보

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

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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