[TS Challenges] 7. Readonly

cansweep·2023년 5월 29일
0

ts-challenges

목록 보기
2/2
post-thumbnail

문제 링크

문제

T의 모든 프로퍼티를 읽기 전용(재할당 불가)으로 바꾸는 내장 제네릭 Readonly<T>를 이를 사용하지 않고 구현하세요.

ex.

interface Todo {
  title: string
  description: string
}

const todo: MyReadonly<Todo> = {
  title: "Hey",
  description: "foobar"
}

todo.title = "Hello" // Error: cannot reassign a readonly property
todo.description = "barFoo" // Error: cannot reassign a readonly property

풀이

  1. Readonly<T>는 T의 모든 속성을 readonly로 설정한 타입을 생성한다.
    위 예시에서 MyReadonly< Todo > 타입의 todo는 title 속성은 "Hey"로, desciption 속성은 "foobar"로 고정되었고 재할당이 불가능하다.

  2. 값을 고정시키기 위해 "Hey"와 "foobar"라는 값을 알아야 한다. 특정 타입(T)의 key 값들은 keyof T로 가져올 수 있고 이 key들을 순회하면서 value에 접근할 수 있다.

    [key in keyof T]:  T[key]
  3. 그리고 T[key]들을 readonly로 설정하면 완성!

답안

type MyReadonly<T> = {readonly [key in keyof T]:  T[key]}

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

profile
하고 싶은 건 다 해보자! 를 달고 사는 프론트엔드 개발자입니다.

0개의 댓글