타입 챌린지 9 - Deep Readonly

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

타입챌린지

목록 보기
16/131

문제 링크

문제

객체의 프로퍼티와 모든 하위 객체를 재귀적으로 읽기 전용으로 설정하는 제네릭 DeepReadonly<T>를 구현하세요.

이 챌린지에서는 타입 파라미터 T를 객체 타입으로 제한하고 있습니다. 객체뿐만 아니라 배열, 함수, 클래스 등 가능한 다양한 형태의 타입 파라미터를 사용하도록 도전해 보세요.

내 풀이

type DeepReadonly<T extends object> = {
  readonly [K in keyof T]: T[K] extends Function?
    T[K]
    :T[K] extends object? 
      DeepReadonly<T[K]>
      :T[K]
      
}

다른 사람의 풀이

type DeepReadonly<T> = keyof T extends never
  ? T
  : { readonly [k in keyof T]: DeepReadonly<T[k]> };

이 풀이는 함수가 value 타입으로 올 때를 대응하지 못한다

0개의 댓글