2024. 7. 2. 20:08ใTIL
๐กTypeScript - ์์ฃผ ์ฌ์ฉํ๋ Utility type ์ ๋ฆฌ

- ์ ํธ๋ฆฌํฐ ํ์ ์ด๋ ํ์ ์คํฌ๋ฆฝํธ์์ ์ฃผ๋ก ์ฌ์ฉ๋๋ ํ์ ์ผ๋ก, ๊ธฐ์กด ํ์ ์ ๋ณํํ๊ฑฐ๋ ์๋ก์ด ํ์ ์ ๋ง๋๋ ๋ฐ ์ฌ์ฉ๋๋ฉฐ, ์ฌ๋ฌ ๊ฐ์ง ์ ํธ๋ฆฌํฐ ํ์ ์ ์ฌ์ฉํ์ฌ ๊ฐ๋ฐ์๊ฐ ํ์ ์ ์ฝ๊ฒ ๋ค๋ฃฐ ์ ์๋๋ก ๋์์ค๋ค.
โข Partial : ๊ฐ์ฒด์ ๋ชจ๋ ์์ฑ์ ์ ํ์ ์ผ๋ก ๋ง๋ ๋ค
interface Profile {
name: string;
age: number;
married: boolean;
}
const newPerson: Partial<Profile> = {
name: 'john',
age: 29,
};
โข Required: ๋ชจ๋ ์ ํ์ ์์ฑ์ ํ์๋ก ๋ง๋ ๋ค.
interface Profile {
name?: string;
age?: number;
married?: boolean;
}
//Required ๊ตฌํ
type R<T> = {
[Key in Keyof T]-?: T[Key];
}
const newPerson: Partial<Profile> = {
name: 'john',
age: 29,
married: true,
};
โข Readonly: ๋ชจ๋ ์์ฑ์ ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ๋ง๋ ๋ค.
// Readonly<T> ๊ตฌํ
type Readonly<T> = {
readonly [P in keyof T]: T[P];
};
interface Profile {
name: string;
age: number;
married: boolean;
}
const readonlyProfile: Readonly<Profile> = {
name: 'john',
age: 29,
married: true,
};
โข Pick
- Pick<T, K> : T ํ์ ์์ K ์์ฑ๋ง ์ ํํ์ฌ ์๋ก์ด ํ์ ์ ๋ง๋ ๋ค.
//pick<T, K> ๊ตฌํ
type Pick<T, K extends keyof T> = {
[P in K]: T[P];
};
interface Profile {
name: string;
age: number;
married: boolean;
}
type NameAndAge = Pick<Profile, 'name' | 'age'>;
const person: NameAndAge = {
name: 'john',
age: 29,
};
โข Omit
- Omit<T, K> : T ํ์ ์์ K ์์ฑ์ ์ ์ธํ ์๋ก์ด ํ์ ์ ๋ง๋ ๋ค.
//Omit ๊ตฌํ<T, K>
type Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>;
interface Profile {
name: string;
age: number;
married: boolean;
}
const newPerson1: Omit<Profile, 'married'> = {
name: 'jun',
age: 30,
};
โข Record
- Record<K, T> : ํน์ ํค ํ์ K์ ๊ฐ ํ์ T๋ฅผ ๊ฐ์ง๋ ๊ฐ์ฒด ํ์ ์ ๋ง๋ ๋ค.
type R<T extends keyof any, S> = { //extends keyof any=> key์์ ์ ํ์กฐ๊ฑด์ ๋ฃ์ด์ค๋ค.
[Key in T] : S;
}
const a: Record<string, number> = { a:3, b:5, c: 7};
โข Exclude
- Exclude<T, K > : T ํ์ ์์ K ํ์ ์ ์ ์ธํ์ฌ ์๋ก์ด ํ์ ์ ๋ง๋ ๋ค.
//Exclude<T, K> ๊ตฌํ
type Exclude<T, K> = T extends K ? never : T;
type Animal = 'Cat' | 'Dog' | 'Human';
type Mammal = Exclude<Animal, 'Human'>; // => Mammal ํ์
์ 'Cat' | 'Dog'
โข Extract
- Extract<T, K > : T ํ์ ์์ K ํ์ ๊ณผ ๊ฒน์น๋ ํ์ ์ ์ถ์ถํ์ฌ ์๋ก์ด ํ์ ์ ๋ง๋ ๋ค.
//Extract<T, K>๊ตฌํ
type Extract<T, K> = T extends K ? T : never;
type Animal = 'Cat' | 'Dog' | 'Human';
type DomesticAnimal = 'Dog' | 'Cat';
type CommonAnimal = Extract<Animal, DomesticAnimal>; // 'Cat' | 'Dog' // ๋๊ฐ์ ํ์
์์ ๊ฒน์น๋ ํ์
!
โข ReturnType
- ReturnType<T> : ํจ์ ํ์ T์ ๋ฐํ ํ์ ์ ์ถ์ถํฉ๋๋ค.
//ReturnType<T> ๊ตฌํ
type ReturnType<T extends (...args: any) => any> = T extends (...args: any) => infer R ? R : any;
function getUser() {
return {
name: 'john',
age: 29,
};
}
type User = ReturnType<typeof getUser>; //=> { name: string; age: number; }
'TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
TIL( Nest.js - IoC, DI ) (0) | 2024.07.04 |
---|---|
TIL (DTO) (0) | 2024.07.03 |
TIL ( ๋ฐ์ฝ๋ ์ดํฐ - ts ) (0) | 2024.07.01 |
TIL ( prisma ์์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค(MySQL) ์ฐ๊ฒฐํ๊ธฐ ) (0) | 2024.06.28 |
TIL( TypeScriptํ์ต ) (0) | 2024.06.27 |