카테고리 없음
타입스크립트(ZeroCho) Utility Types
stella0905
2023. 8. 11. 14:48
Partial 타입 분석
interface Profile {
name: string,
age:number,
married:boolean,
}
const uri:Profile = {
name:'uri',
age:29,
married:false
}
const newUri:Profile = {
name:'uri',
age:29,
}
이렇게 이름과 나이는 동일하게 들어가는데 newUri에 결혼유무가 들어가지 않으면 에러가 발생한다.
이걸 인터페이스를 또 만들기에는 이름과 나이가 중복이기 때문에 좋지 않다.
const newUri:Partial<Profile> = {
name:'uri',
age:29,
}
Partial을 사용해주면 다 옵셔널 처리가되어 에러가 사라지게된다.
Partial을 풀어서 코드로 보면 아래 코드로 해석할 수 있다.
type P<T> = {
[key in keyof T]?:T[key]
}
// ⬇️ 분해하면 아래처럼 해석할 수 있다.
P<Profile>
{
name?:
age?:
married?:
}
Pick 타입 분석
interface Profile {
name: string,
age:number,
married:boolean,
}
const uri:Profile = {
name:'uri',
age:29,
married:false
}
const newUri:Pick<Profile, 'name'|'age'> = {
name:'uri',
age:29,
}
프로필에서 name이나 age만 가져온다는 의미
interface Profile {
name: string,
age:number,
married:boolean,
}
type P<T, S extends keyof T> = {
[key in S]: T[key]
}
const uri:Profile = {
name:'uri',
age:29,
married:false
}
const newUri:Pick<Profile, 'name'|'age'> = {
name:'uri',
age:29,
}
Omit, Exclude, Extract 타입 분석
Exclude
interface Profile {
name: string,
age:number,
married:boolean,
}
type Name = Profile['name']
const uri:Profile = {
name:'uri',
age:29,
married:false
}
// Profile에서 married만 뺌
type A = Exclude<keyof Profile, 'married'>
type A 는 'name', 'age'만 남는다.
type Animal = 'Cat' | 'Dog' | 'Human';
type Mammal = Exclude<Animal, 'Human'>
마찬가지고 type Mammal은 Cat, Dog만 남는다.
interface Profile {
name: string,
age:number,
married:boolean,
}
type Name = Profile['name']
const uri:Profile = {
name:'uri',
age:29,
married:false
}
type Animal = 'Cat' | 'Dog' | 'Human';
type Mammal = Exclude<Animal, 'Human'>
// Profile에서 married만 뺌
type A = Exclude<keyof Profile, 'married'>
type O<T, S extends keyof any> = Pick<T,Exclude<keyof T,S>>
const newUri:O<Profile,'married'> = {
name:'uri',
age:29,
}
keyof any 는 어떤것이든 키만 들어올 수 있다 라는 의미
type Exclude<T, U> = T extends U ? never : T;
type Extract<T, U> = T extends U? T : never;
Exclude T가 U와 같지않은 것만 추려낸다.
Extract T가 U와 같은것만 추려낸다.
타입에는 삼항연산자가 들어갈 수 있다.