반응형
맵드 타입(Mapped Type)
맵드 타입이란 기존에 정의되어 있는 타입을 새로운 타입으로 변환해 주는 문법을 의미합니다. 마치 자바스크립트 map() API 함수를 타입에 적용한 것과 같은 효과를 가집니다.
다음은 유니온 타입을 맵드 타입으로 변환하는 예제입니다.
interface Person {
name: string;
age: number;
}
type PersonPartial = {
[P in keyof Person]?: Person[P];
};
// 선택적으로 설정한 속성은 생략 가능
const person1: PersonPartial = {
name: "Jane",
};
type PersonReadonly = {
readonly [P in keyof Person]: Person[P];
};
const person2: PersonReadonly = {
name: "John",
age: 30,
};
// 속성의 값을 변경하려고 하면 컴파일 에러 발생
person2.name = "Jane"; // 에러: Cannot assign to 'name' because it is a read-only property.
person2.age = 25; // 에러: Cannot assign to 'age' because it is a read-only property.
type PersonRecord = {
[P in keyof Person]: Record<'data', Person[P]>;
};
const person3: PersonRecord = {
name: {
data: "John",
},
age: {
data: 30,
},
};
위 코드에서 PersonPartial, PersonReadonly, 그리고 PersonRecord는 맵드 타입을 사용하여 Person 인터페이스를 변환한 새로운 타입입니다.
PersonPartial은 Person의 각 프로퍼티를 선택적으로 만들어줍니다.
PersonReadonly는 Person의 모든 프로퍼티를 읽기 전용으로 만들어줍니다.
PersonRecord는 Person의 각 프로퍼티를 Record 타입으로 변환하여 저장합니다.
맵드 타입은 유용하게 사용될 수 있으며, 타입스크립트에서 더욱 강력한 타입을 만드는 데에 도움이 됩니다.
반응형
'기억보단 기록을 > Typescript' 카테고리의 다른 글
[Typescript] Section 11. 유틸리티 타입 (0) | 2023.05.21 |
---|---|
[Typescript] generic의 extends와 intreface의 extends의 차이 (0) | 2023.05.20 |
[Typescript] Section 10. 타입추론 (0) | 2023.05.20 |
[Typescript] Section 09. 제네릭 (0) | 2023.05.20 |
[Typescript] Section 08. Class (0) | 2023.05.20 |