
π μ΄λ―Έ λ§λ€μ΄μ§ βνΈλ¦¬ν νμ λꡬβ
μ½κ² λ§νλ©΄
π νμ
μ λ€μ λ§λ€μ§ μκ³ βκ°κ³΅βν΄μ μ°λ κΈ°λ₯
Post β μΌλΆλ§ μ ν β μλ‘μ΄ νμ
Post β μ λΆ νμλ‘ λ³κ²½ β μλ‘μ΄ νμ
π‘ κ°λ
π λͺ¨λ νλ‘νΌν°λ₯Ό μ νμ μΌλ‘(?) λ°κΏμ€
type Partial<T> = {
[key in keyof T]?: T[key];
};
π μ½κ² μ΄ν΄
μλ:
title: string (νμ)
λ°λλ©΄:
title?: string (μ ν)
π μ¬μ© μ΄μ
π "μμ μ μ₯" / "μμ μ€μΈ λ°μ΄ν°"
const draft: Partial<Post> = {
title: 'μμ μ λͺ©'
};
β μΌλΆλ§ λ£μ΄λ μλ¬ μμ
π‘ κ°λ
π μ ν(optional)λ κ°μ λ‘ νμλ‘ λ°κΏ
type Required<T> = {
[key in keyof T]-?: T[key];
};
π -? β optional μ κ±°
π μμ
thumbnailURL?: string;
π
thumbnailURL: string; // 무쑰건 μμ΄μΌ ν¨
π‘ κ°λ
π μμ λͺ»νκ² λ§μ
type Readonly<T> = {
readonly [key in keyof T]: T[key];
};
π μμ
readonlyPost.title = "λ³κ²½"; β μλ¬
π μ€λ¬΄μμ βλ°μ΄ν° 보νΈβν λ λ§μ΄ μ¬μ©
π‘ κ°λ
π νμν κ²λ§ κ°μ Έμ€κΈ°
type Pick<T, K extends keyof T> = {
[key in K]: T[key];
};
π μμ
Pick<Post, 'title' | 'content'>
π κ²°κ³Ό
{
title: string;
content: string;
}
π‘ κ°λ
π νΉμ νλ‘νΌν° μ κ±°
type Omit<T, K> = Pick<T, Exclude<keyof T, K>>;
π μ½κ² μ΄ν΄
Omit<Post, 'title'>
π κ²°κ³Ό
title β μ κ±°λ¨
π‘ κ°λ
π "ν€ + κ° νμ
"μΌλ‘ κ°μ²΄ μλ μμ±
type Record<K, V> = {
[key in K]: V;
};
π μμ
type Thumbnail = Record<
'large' | 'small',
{ url: string }
>;
π κ²°κ³Ό
{
large: { url: string };
small: { url: string };
}
π‘ κ°λ
π νΉμ νμ
μ κ±°
type Exclude<T, U> = T extends U ? never : T;
π μμ
type A = Exclude<string | boolean, boolean>;
π κ²°κ³Ό
string
π‘ κ°λ
π 곡ν΅λ κ²λ§ λ¨κΉ
type Extract<T, U> = T extends U ? T : never;
π μμ
Extract<string | boolean, boolean>
π κ²°κ³Ό
boolean
π‘ κ°λ
π ν¨μμ return νμ
κ°μ Έμ€κΈ°
type ReturnType<T> =
T extends (...args: any) => infer R ? R : never;
π ν΅μ¬
π infer R = βνμ μΆλ‘ β
μμ
function funcA() {
return 'hello';
}
type A = ReturnType<typeof funcA>;
π κ²°κ³Ό
string
π₯ ν΅μ¬ μ 리 (μ§μ§ μ€μ)
| νμ
| μλ―Έ |
| ---------- | -------- |
| Partial | μΌλΆλ§ |
| Required | μ λΆ νμ |
| Readonly | μμ κΈμ§ |
| Pick | 골λΌμ°κΈ° |
| Omit | λΉΌκΈ° |
| Record | κ°μ²΄ λ§λ€κΈ° |
| Exclude | μ κ±° |
| Extract | μΆμΆ |
| ReturnType | ν¨μ κ²°κ³Ό νμ
|
keyof Post
// "title" | "content" | ...
type Pick<T, K> = ...
β
type Pick<T, K extends keyof T>
π μ¬μ€ λ΄λΆλ μ΄κ±° νλμ
Pick + Exclude μ‘°ν©
π§ μ 리μ©
λͺ¨λ νλ‘νΌν°λ₯Ό μ νμ μΌλ‘ λ³κ²½
λͺ¨λ νλ‘νΌν°λ₯Ό νμλ‘ λ³κ²½
λͺ¨λ νλ‘νΌν°λ₯Ό μ½κΈ° μ μ©μΌλ‘ λ³κ²½
νΉμ νλ‘νΌν°λ§ μ ν
νΉμ νλ‘νΌν° μ κ±°
ν€μ κ°μΌλ‘ κ°μ²΄ μμ±
Tμμ U μ κ±°
Tμμ Uλ§ μΆμΆ
ν¨μ λ°ν νμ μΆμΆ