타입 챌린지 17973 - DeepMutable

소파의 벨로그·2025년 5월 19일

타입챌린지

목록 보기
88/131

문제 링크

문제

객체의 모든 파라미터(그리고 하위의 객체들을 재귀적으로) 변할 수 있게 만드는 DeepMutable<T>를 구현하라

Implement a generic DeepMutable<T> which make every parameter of an object - and its sub-objects recursively - mutable.

내 풀이

type DeepMutable<T extends object> = {
  -readonly [R in keyof T]: T[R] extends Function?T[R]
                            :T[R] extends object?DeepMutable<T[R]>:T[R]
}

mapped type으로 구현했다.

우선 모든 readonly를 없애기 위해 - 연산자를 사용했다.

그리고 object가 아니면 해당 T[R]은 그대로 반환,
object면 DeepMutable<T[R]>을 반환한다.

이때 Function임을 확인하는 이유는 Function이 object를 확장가능하기 때문이다.

이와 관련해서 어떤 경우에 Function이 확장가능한지 (ex:()=>{}는 Function을 확장가능한가? call signiture가 있으면 Function인가?) 추가적인 조사가 필요해보인다.

참고 자료

https://www.typescriptlang.org/docs/handbook/2/functions.html#call-signatures

0개의 댓글