타입스크립트 공식문서정리 Mapped타입
2024-06-14
매핑타입은 index signature를 기반으로 만들어진다.
밸류가 모두 boolean인 객체타입으로 바꿔주는 제네릭을 만들고싶으면
type OptionsFlags<Type> = {
[Property in keyof Type]: boolean;
};
이렇게 해주면 OptionFlags<typeof {darkMode: ()=>void;}>이 {darkMode:boolean;}타입으로 바뀐다 !
객체의 키에 -/+ ?, -/+ readonly가 사용가능하다.
-/+ readonly에서 그냥 readonly만 쓰면 +라는 의미이고, -는 기존 속성에서 readonly속성을 해제한다는의미 +는 readonly로 설정한다는 의미
?에 대해서도 마찬가지. -?이면 ?를해제하겠다는의미
index signature 내부에서 as로 키 리매핑이 가능하다
예시
type Getter<T> = {
[property in keyof T as `get${string & property}`]: ()=> T[prop]
}
으로 작성시
interface Person {
name: string;
age: number;
location: string;
}
type LazyPerson = Getter<Person>;
type LazyPerson = {
getname: ()=>string;
age: ()=>number;
location: ()=>string;
}
이 가능하다.
재미있는 점은 단순단언은 아니라는 것이다. 만약 여기서 never를 사용한다면 해당 키를 제거(필터링)할 수 있다.