개발후라이
개발후라이
개발후라이
  • 분류 전체보기 (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
  • 홈

인기 글

태그

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

최근 댓글

최근 글

전체 방문자
오늘
어제

티스토리

hELLO · Designed By 정상우.
개발후라이

개발후라이

[Typescript Challenges] Pick, Readonly, Tuple to Object
Web Front End/Javascript & Typescript

[Typescript Challenges] Pick, Readonly, Tuple to Object

2022. 2. 27. 14:04
반응형

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

Pick

  • https://github.com/type-challenges/type-challenges/blob/master/questions/4-easy-pick/README.md
  • 문제: Pick<Todo, 'title'>와 같은 결과가 나오도록 타입스크립트로 구현하기

1) K가 우선 interface의 key 값을 기반으로 하는 타입이어야 한다. 따라서 keyof를 활용해 두 번째 제네릭 값을 구성한다. K extends keyof T

Screen Shot 2022-02-26 at 8 10 50 PM

2) keyof 결과(=K)가 union이기 때문에 K 중 하나를 key 값으로 두고, value는 해당 key 값에 대한 value가 되게 하면 된다. {[k in K]: T[k]}

type MyPick<T, K extends keyof T> = { [k in K]: T[k] };

Readonly

  • https://github.com/type-challenges/type-challenges/blob/master/questions/7-easy-readonly/README.md
  • 문제: Readonly<Todo>와 같은 결과가 나오도록 타입스스크립트로 구현하기

1) 모든 요소들이 readonly가 되도록 해야 하기 때문에 Pick 문제와 동일하게 keyof로 key union 값을 추출한다. 요소를 하나씩 돌도록 key는 in, value는 값 참조 형식으로 만든다. [k in keyof T]: T[k]
2) readonly 키워드는 key 값에만 유효하기 때문에 key에 붙여준다. { readonly [k in keyof T]: T[k] }

type MyReadonly<T> = { readonly [k in keyof T]: T[k] };

Tuple to Object

  • https://github.com/type-challenges/type-challenges/blob/master/questions/11-easy-tuple-to-object/README.md
  • 문제: Tuple(배열)을 key와 value 값이 같은 객체로 변환하는 문제 ['tesla', 'model 1'] => { tesla: 'tesla', 'model 1': 'model 1' }

1) 튜플 타입에서 keyof tuple을 하게 되면 [0, 1, 2, ...]와 같이 인덱스 값을 가지게 된다. 이것을 순회하여 value 값을 똑같이 가지게 한다면 아래와 같다.

  • 하지만 이것은 틀린 답이다. keyof T를 실행하게 되면 string | number | symbol이 타입으로 지정된다.
{ [k in T[keyof T]]: k };

2) 답은 간단하다. keyof T로 했던 부분을 number 로 명시해 주면 된다.

type TupleToObject<T extends readonly string[]> = { [k in T[number]]: k };

결론

  • 자주 쓰던 문법이고 easy 문제인데도 처음엔 눈앞이 깜깜했다. (결국 정답을 본..) 일주일에 두세개씩 풀어서 타입 감을 올려야겠다.
반응형
저작자표시 (새창열림)
    'Web Front End/Javascript & Typescript' 카테고리의 다른 글
    • [Typescript Challenges] Awaited, If, Concat
    • [Typescript Challenges] First of Array, Length of Tuple, Exclude
    • [함수형 자바스크립트] Symbol, Iterator, Generator
    • 한글이 자소분리될 때 해결 방법(ㅎㅏㄴㄱㅡㄹ -> 한글)
    개발후라이
    개발후라이
    어제보다 오늘 발전하기 위한 공간 https://github.com/choisohyun

    티스토리툴바