TypeScript·
9 - Deep Readonly
- #Type Challenges
- #TypeScript
질문
객체의 프로퍼티와 모든 하위 객체를 재귀적으로 읽기 전용으로 설정하는 제네릭 DeepReadonly<T>를 구현하세요.
이 챌린지에서는 타입 파라미터 T를 객체 타입으로 제한하고 있습니다. 객체뿐만 아니라 배열, 함수, 클래스 등 가능한 다양한 형태의 타입 파라미터를 사용하도록 도전해 보세요.
예시:
1type X = {2x: {3a: 14b: 'hi'5}6y: 'hey'7}89type Expected = {10readonly x: {11readonly a: 112readonly b: 'hi'13}14readonly y: 'hey'15}1617type Todo = DeepReadonly<X> // should be same as `Expected`181920
선행 지식
-
object,Object,{}타입object: 원시 타입을 제외한 모든 객체 타입(함수, 배열 등 포함)Object: JS의 Object에 대응하는 매우 넓은 타입.(실무에서 필터로 사용하기엔 비권장){}:null과undefined를 제외한 모든 타입 -
배열의 키
배열도 객체이므로
keyof를 통해 순회 가능하다. -
readonly
할당(대입) 가능성 기준으로, readonly 리스트 타입은 “쓰기 불필요”라 요구사항이 약하므로 더 넓다. 따라서 mutable 리스트는 readonly 리스트에 할당 가능하다.
1any[] extends readonly any[] ? true : false // true