T에서 K 프로퍼티만 읽기 전용으로 설정해 새로운 오브젝트 타입을 만드는 제네릭 MyReadonly2<T, K>를 구현하세요. K가 주어지지 않으면 단순히 Readonly처럼 모든 프로퍼티를 읽기 전용으로 설정해야 합니다.
type MyReadonly2<T, K extends keyof T = keyof T> = {
readonly [R in K]:T[R]
}&{
[R in keyof T as R extends K?never:R]:T[R]
}
type MyReadonly2<T, K extends keyof T = keyof T> =
Omit<T, K> &
Readonly<Pick<T, K>>;
타입스크립트에서 제공하는 커스텀 타입을 잘 활용한 문제 풀이이다.
동작원리는 내 코드와 같다.
나는 기존에 풀었던 Omit 구현과 Readonly을 구현한 기억이 나 풀어놨는데,
생각해보니 굳이 그럴 필요가 없이 잘 만들어진 커스텀 타입을 활용하는 것이 좋을 것 같다는 생각이 들었다.