Typescript 시리즈 - 읽기 전용 유틸리티 유형
읽기 전용 유틸리티 유형이란 무엇입니까?
Readonly<Type>
유형의 모든 속성이 읽기 전용으로 설정된 유형을 생성합니다. 즉, 생성된 유형의 속성을 재할당할 수 없습니다. Docs .예를 들어 보겠습니다.
interface Person {
name: string;
}
const person: Readonly<Person> = {
name: "Joe",
schedule: {
starts: "08:00",
ends: "16:00"
}
};
person.name = "Tom";
// Cannot assign to 'title' because it is a read-only property.
보시다시피 name 속성은 재할당할 수 없습니다.
유틸리티 유형은 기본적으로 다음을 수행합니다.
interface Person {
readonly name: string;
readonly schedule: ...
}
명심해야 할 한 가지는 중첩 속성에 대한 읽기 전용을 추가하지 않는다는 것입니다. 예를 들어 시작 유형에도 읽기 전용을 추가하지 않습니다. 모든 중첩 속성에 추가 읽기 전용 한정자를 추가해야 합니다.
person.schedule.starts = "12:00"; // This is ok
그러나 읽기 전용 유틸리티는 내부적으로 어떻게 작동합니까?
type MyReadonly<Type> = {
readonly [Key in keyof Type] : Type[Key]
}
좋아, 나쁘지 않아, 분해하자.
먼저 모든 속성 유형에
readonly
키워드를 추가합니다.그런 다음 [
Key in keyof Type]
키워드는 Key가 Type("name"| "schedule")에서 추출된 키 중 하나여야 함을 의미합니다.Type[Key]
마지막으로 여기서는 단순히 속성 유형에 액세스합니다. 개체의 값에 액세스하는 방법과 동일하게 다음 예제를 살펴보겠습니다.약간의 참고 사항:
읽기 전용 유틸리티 유형을 사용할 때는 주의를 기울여야 합니다. 얕은 객체 불변성에 완벽하지만 배열이나 중첩된 객체 속성을 불변으로 만들지는 않습니다.
고맙습니다!
당신은 여기에서 나를 찾을 수 있습니다
Reference
이 문제에 관하여(Typescript 시리즈 - 읽기 전용 유틸리티 유형), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/sarmunbustillo/typescript-series-readonly-utility-type-mla텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)