Javascript
타입스크립트 유틸리티 타입
브라더 코드
2023. 4. 14. 21:12
타입스크립트는 유용한 유틸리티 타입이 많다.
공부하고 숙지해두자. 아는만큼 개발에 쓰일 것이다.
/** 1. keyof : interface의 key값들을 유니언 형태로 뽑아냄 */
interface User {
id: number;
name: string;
age: number;
gender: 'm' | 'f';
}
type UserKey = keyof User;
// UserKey : 'id | name | age | gender';
const uk: UserKey = 'gender';
/** 2. Partial<T> : property를 optional로 만듬 */
let admin: Partial<User> = {
id: 1,
name: 'Bob',
}
/** 3. Required<T> : 모든 property를 필수로 만듬 */
interface Animal {
id: number;
name: string;
age?: number;
}
// 아래처럼 쓰면 에러 발생함
let cat: Required<Animal> = {
id: 1,
name: 'Bob',
}
/** 4. Readonly<T> : 처음 할당만 가능하고 뒤에 수정 불가능 */
interface Sports {
id: number;
players?: number;
}
let Soccer: Readonly<Sports> = {
id: 1,
players: 11,
}
Soccer.players = 4;
/** 5. Record<K,T> */
type Grade = '1' | '2' | '3' | '4';
type Score = 'A' | 'B' | 'C' | 'D';
const score: Record<Grade, Score> = {
1: 'A',
2: 'C',
3: 'B',
4: 'D',
}
interface UserPerson {
id: number;
name: string;
age: number;
}
function isValid(user: UserPerson) {
const result: Record<keyof UserPerson, boolean> = {
id: user.id > 0,
name: user.name !== '',
age: user.age > 0,
};
return result;
}
/** 6. Pick<T,K> : T타입에서 K프로퍼티만 골라서 사용 */
interface Person {
id: number;
name: string;
age: number;
gender: 'M' | 'W';
}
let adminPerson: Pick<Person, 'id' | 'name'> = {
id: 1,
name: 'kim',
}
/** 7. Omit<T,K> : Pick과 반대 */
let adminPerson2: Omit<Person, 'id' | 'name'> = {
age: 10,
gender: 'W',
}
/** 8. Exclude<T1,T2> : 타입T1에서 T2를 제외하고 사용 */
type T1 = string | number | boolean;
type T2 = Exclude<T1, number | string>;
/** 9. NonNullable<Type> : null, undefined를 제외한 타입을 사용 */
type Type1 = string | null | undefined | boolean;
type Type2 = NonNullable<Type1>;