Po_tta_tt0
콩심콩 팥심팥 🌱
Po_tta_tt0
전체 방문자
오늘
어제
  • 분류 전체보기 (266)
    • 🐛 회고 (14)
    • 💭 생각 (2)
    • 🤸‍♀️ 내 프로젝트 (16)
      • FISH-NEWS (8)
      • MBTI 과몰입 테스트 (2)
      • twitter clonecoding with TS (4)
      • pilzagenda (2)
    • 👨‍👩‍👧‍👦 팀 프로젝트 (2)
      • 피우다 프로젝트 (0)
      • SEMO(세상의 모든 모임) (1)
      • 마음을 전하는 텃밭 (1)
      • Stackticon (0)
    • 👨‍💻 CS지식 (11)
    • ✍ 공부 (94)
      • JavaScript (21)
      • TypeScript (39)
      • Html (0)
      • CSS (2)
      • React (18)
      • NextJS (7)
      • Vue (1)
      • Python (1)
      • Django (0)
      • 개발환경 & 그 외 (2)
    • 🏄‍♀️ 코딩테스트 (99)
      • 🐍 Python (99)
    • 🐙 Git & GitHub (3)
    • 📑 오류기록 (8)
    • 📚 우리를 위한 기록 (9)
    • 수업 (3)
    • 강의 등 (2)
    • 👩‍🎓 SSAFY (0)
    • 👋 우테코 (0)

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

태그

  • 백준
  • js
  • React
  • 시뮬레이션
  • BFS + DP
  • 구현
  • 파이썬 감시 피하기
  • bfs
  • 플로이드 워셜
  • 파이썬 다익스트라
  • 파이썬
  • Next.js
  • 이분탐색
  • DP
  • 백준 파이썬
  • 백준 숨바꼭질
  • dfs
  • 문자열
  • 자바스크립트
  • react-router-dom

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Po_tta_tt0

콩심콩 팥심팥 🌱

✍ 공부/TypeScript

[type-challenges] Flatten

2023. 6. 26. 09:03
반응형

문제

주어진 배열을 플랫한 배열 타입으로 바꾸는 Flatten 타입을 구현하세요.

설명


/* _____________ Your Code Here _____________ */


type Flatten<T,S extends any[] =[]> = T extends [any:infer K, ...a: infer P] ? K extends any[] ? Flatten<[...K,...P],S> : Flatten<[...P],[...S,K]> :S

/* _____________ Test Cases _____________ */
import type { Equal, Expect } from '@type-challenges/utils'



type cases = [
  Expect<Equal<Flatten<[]>, []>>,
  Expect<Equal<Flatten<[1, 2, 3, 4]>, [1, 2, 3, 4]>>,
  Expect<Equal<Flatten<[1, [2]]>, [1, 2]>>,
  Expect<Equal<Flatten<[1, 2, [3, 4], [[[5]]]]>, [1, 2, 3, 4, 5]>>,
  Expect<Equal<Flatten<[{ foo: 'bar'; 2: 10 }, 'foobar']>, [{ foo: 'bar'; 2: 10 }, 'foobar']>>,
]

// @ts-expect-error
type error = Flatten<'1'>

바로 전 문제랑 아이디어가 비슷하다.

  1. T라는 배열을 0번째 배열과 나머지 배열로 분리한다 T extends [any:infer K, ...a: infer P]
  2. 분리가 되면 0번째 배열(K)가 플랫하지 않은 배열인지 (ex [[3]]) 확인한다
  3. 플랫하지 않은 배열일 경우
    • 0번째 배열을 spread연산으로 풀어준다. 또 나머지 배열도 풀어준다 [...k, ...P]
    • 두번째 인자로는 지금까지 만들어진 S를 넣어준다
    • => Flatten<[...K,...P],S>
  4. 플랫한 배열일 경우
    • K를 따로 풀어줄 필요가 없으므로 다음 Flatten의 T로 spread 연산으로 풀어준 P만 넣어준다
    • S에 플랫한 K를 추가해준다
  5. T가 [any:infer K, ...a: infer P]를 extend하지 않을 경우: 내용물이 텅텅 빌 경우 재귀를 통해 만들어진 S를 찍는다
반응형
저작자표시

'✍ 공부 > TypeScript' 카테고리의 다른 글

[type-challenges] Absolute  (0) 2023.06.27
[type-challenges] Append to object  (0) 2023.06.27
[type-challenges] Length of String  (0) 2023.06.26
[type-challenges] Append Argument  (0) 2023.06.26
[type-challenges] ReplaceAll  (0) 2023.06.13
    '✍ 공부/TypeScript' 카테고리의 다른 글
    • [type-challenges] Absolute
    • [type-challenges] Append to object
    • [type-challenges] Length of String
    • [type-challenges] Append Argument
    Po_tta_tt0
    Po_tta_tt0
    감자의 코딩하는 블로그 콩심은데 콩나고 팥심은데 팥난다

    티스토리툴바