타입 챌린지 459 - Flatten

소파의 벨로그·2025년 3월 22일

타입챌린지

목록 보기
31/131

문제 링크

문제

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

내 풀이

type FlattenImplementation<T extends any[], Result extends any[]=[]>=
  T extends [infer First,...infer Last]?
    First extends any[]?
      FlattenImplementation<Last,[...Result,...FlattenImplementation<First>]>
      :FlattenImplementation<Last,[...Result,First]>
  :Result

type Flatten<T extends any[]> =FlattenImplementation<T>

다른 사람의 풀이

type Shift<T extends any[]> = T extends [T[0], ...infer item] ? [...item] : []
type Flatten<T extends any[], R extends any[]=[]> = T extends [] ? R :
    (T[0] extends any[] ? Flatten<[...T[0], ...Shift<T>], R> : Flatten<Shift<T>, [...R, T[0]]>)

shift 타입을 만들어 푼 사람도 있었다.

참고자료

https://github.com/type-challenges/type-challenges/issues/1314

0개의 댓글