[TypeScript] Utility Type​, Mapped Type​

뒹귤·2024년 7월 5일
1

타입스크립트

목록 보기
4/5

유틸리티 타입과 Mapped Type​은 이미 정의되어 있는 타입을 기반으로 새로운 타입을 생성할 때 사용합니다.

  • Utility Type : Readonly​, Required​, Partial, ​Pick​, Omit 등​
  • Mapped Type : in, in keyof, 매핑 수정자(?, -?, readonly, -readonly )

유틸리티 타입

기존에 정의되어 있는 타입을 기반으로 새로운 타입을 생성할 때 사용하는 타입스크립트 내장 타입
https://www.typescriptlang.org/ko/docs/handbook/utility-types.html

Readonly<Type>

  • Type 집합의 모든 프로퍼티를 readonly로 설정한 타입을 생성
  • 원래 있던 타입 앞에 Readonly 키워드를 붙임
// 인터페이스로 정의
interface ReadonlyTodo extends Readonly<Todo> {}

// 타입 별칭으로 정의
type ReadonlyTodo = Readonly<Todo>;

Required<Type>

  • Type 집합의 모든 프로퍼티를 필수로 설정한 타입을 생성
  • 옵셔널 프로퍼티 제거
  • Partial의 반대

Partial<Type>

  • Type 집합의 모든 프로퍼티를 옵셔널로 설정한 타입을 생성
  • 옵셔널 프로퍼티 추가

Pick<Type, Keys>​

  • Type에서 프로퍼티 Keys의 집합을 선택해 타입을 생성
  • Pick<Todo, 'title' | 'content'>

Omit<Type, Keys>​

  • Type의 모든 프로퍼티에서 Keys를 제거한 타입을 생성
  • Omit<Todo, 'title' | 'content'>

Mapped 타입

  • 이미 정의된 타입을 기반으로 새로운 타입을 생성
  • 객체 타입에서 일부만 변경한 새로운 객체 타입 생성​
  • in : 유니언 타입을 기반으로 객체 타입 생성
type UserField = 'id' | 'name' | 'address' | 'phone';
type User = {
	[ Prop in UserField ]: string;
}
// type User = { 
// 	address: string;  
// 	id: string;  
// 	name: string;  
// 	phone: string;  
// }
  • in keyof : 객체 타입을 기반으로 객체 타입 생성
    - keyof: 객체로 정의된 타입의 모든 속성을 유니언 타입으로 반환
type User = {
	readonly id: string;
	name: string;
	address: string;
	phone?: string;
}
type UserField = {
	[ Prop in keyof User ]: string | undefined;
}
// type UserField = {  
//   readonly id: string | undefined;  
//   name: string | undefined;  
//   address: string | undefined;  
//   phone?: string | undefined;  
// }

매핑 수정자​

  • Mapped 타입에서 속성의 특성을 변경할 때 사용하는 키워드
  • ?, -?, readonly, -readonly 수정자 사용
// 모든 속성을 옵셔널로
type MyPartial<T> = {
	[ P in keyof T ]?: T[P];
}

// 모든 속성에서 readonly 키워드 제거
type MyPartial<T> = {
	-readonly [ P in keyof T ]?: T[P];
}
profile
🌱 FE 

0개의 댓글

관련 채용 정보