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
Readonly<T>
는 T의 모든 속성을 readonly로 설정한 타입을 생성한다.
위 예시에서 MyReadonly< Todo > 타입의 todo는 title 속성은 "Hey"로, desciption 속성은 "foobar"로 고정되었고 재할당이 불가능하다.
값을 고정시키기 위해 "Hey"와 "foobar"라는 값을 알아야 한다. 특정 타입(T)의 key 값들은 keyof T로 가져올 수 있고 이 key들을 순회하면서 value에 접근할 수 있다.
[key in keyof T]: T[key]
그리고 T[key]
들을 readonly로 설정하면 완성!
type MyReadonly<T> = {readonly [key in keyof T]: T[key]}
https://github.com/type-challenges/type-challenges/issues/27795