β¨οΈ conceptualization/Typescript
μ νΈλ¦¬ν° νμ (Utilty Types)
awesomeyelim
2022. 9. 12. 16:12
728x90
π₯ typescriptμμ λ€μνκ² μ¬μ©λλ utility typeμ λνμ¬ μμ보μ
1. keyof
2. Partial<T>
3. Required<T>
4. Readonly<T>
5. Record<K,T>
6. Pick<T,K>
7. Omit<T,K>
8. Exclude<T1,T2>
9. NonNullable<Type>
1. keyof νμ
ππ» κ°μ²΄μ key κ°μ μΆμΆνλ€
interface User {
id: number;
name: string;
age: number;
gender: "m" | "f";
}
type UserKey = keyof User;
// π λ€μκ³Ό κ°μ ν€ κ°μ λνλΈλ€
// 'id' | 'name'| 'age'| 'gender'
const uk: UserKey = "name";
// π name κ³Ό κ°μ UserKey νλ‘νΌν° κ°μ΄ λ€μ΄κ°μ§ μμΌλ©΄ errorκ° λ°μνλ€.
2. Partial
ππ» partialμ νλ‘νΌν°λ₯Ό λͺ¨λ μ΅μ
μΌλ‘ λ°κΏμ€λ€.
μμλΉκ΅
interface User {
id: number;
name: string;
age: number;
gender: "m" | "f";
}
// π User νμ
λ΄μ νλ‘νΌν° κ°μ΄ μΌλΆλ§ λ€μ΄κ°μμΌλ‘ errorκ° λ°μνλ€
let admin: User = {
id: 1,
name: "yelim",
}
β μ΄λ΄λ partialμ μ¬μ©νμ¬ ν΄κ²°ν΄λ³΄μ
let admin: Partial<User> = {
id: 1,
name: "yelim",
};
// π User νμ
μ Partial<User> μ²λΌ κ°μλ€λ κ²μ λ€μκ³Ό κ°μ μλ―Έμ΄λ€.
// interface User {
// id?: number;
// name?: string;
// age?: number;
// gender?: "m" | "f";
// }
3. Required
ππ» (partial μ λ°λκ°λ
) λͺ¨λ νλ‘νΌν°λ₯Ό νμ κ°μΌλ‘ λ°κΏμ€λ€.
μμλΉκ΅
interface User {
id: number;
name: string;
age?: number; // π ageλ optional κ°μΌλ‘ errorκ° λμ§μλλ€.
}
let admin: User = {
id: 1,
name: "yelim",
};
- νμ§λ§
Required<User>
λ‘ κ°μΈκ² λλ€λ©΄ ?
interface User {
id: number;
name: string;
age?: number;
}
let admin: Required<User> = { // π optional κ°μ΄μλ age νλ‘νΌν°κ° νμ κ°μ΄ λλ©° error messageκ° λ°μνλ€.
id: 1,
name: "yelim"
};
4. Readonly
ππ» μ½κΈ° μ μ©μΌλ‘ λ°κΏμ€λ€.
interface User {
id: number;
name: string;
age?: number;
}
let admin: Readonly<User> = {
id: 1,
name: "yelim",
};
admin.id = 10; // π μ½κΈ° μ μ© νλ‘νΌν° id κ°μ μμ ν μ μλ€.
5. Record<K,T>
ππ» Record<K,T> μ¬κΈ°μ Kλ key μ΄κ³ , Tλ typeμ΄λ€.
μμλΉκ΅
- λ€μκ³Ό κ°μ μμ κ° μλ€.
interface Score {
"1": "A" | "B" | "C" | "D";
"2": "A" | "B" | "C" | "D";
"3": "A" | "B" | "C" | "D";
"4": "A" | "B" | "C" | "D";
}
const score: Score = {
1: "A",
2: "B",
3: "C",
4: "D",
};
- μ¬κΈ°μ
Record<K,T>
λ₯Ό νμ©ν΄ 보면..
// π λ€μκ³Ό κ°μ΄ λνλΌ μ μλ€.
const score: Record<"1" | "2" | "3" | "4", "A" | "B" | "C" | "D"> = {
1: "A",
2: "B",
3: "C",
4: "D",
};
- μ’ λ μ 리ν΄μ λνλ΄λ³΄μ !
type Grade = "1" | "2" | "3" | "4";
type Score = "A" | "B" | "C" | "D";
const score: Record<Grade, Score> = {
1: "A",
2: "B",
3: "C",
4: "D",
};
λ€λ₯Έ νμ© μμ
interface User {
id: number;
name: string;
age: number;
}
function isValid(user: User) {
const result: Record<keyof User, boolean> = {
// π Userμ ν€κ°μ μ°Έμ‘°, Record<K,T>λ₯Ό νμ©νμ¬ λ€μκ³Ό κ°μ΄ λνλΌμ μλ€.
id: user.id > 0,
name: user.name !== "",
age: user.age > 0,
};
return result;
}
6. Pick<T,K>
ππ» Pick<T,K> T νμ
μμ K νλ‘νΌν°λ§ 골λΌμ μ¬μ©νλ€.
interface User {
id: number;
name: string;
age: number;
gender: "m" | "w";
}
const admin: Pick<User, "id"| "name"> = {
id: 0,
name: "bob",
};
7. Omit<T,K>
ππ» Pick<T,K>κ³Ό λ°λλ‘ νΉμ νλ‘νΌν°λ§ μ μΈνκ³ μ¬μ©ν μ μλ€.
interface User {
id: number;
name: string;
age: number;
gender: "m" | "w";
}
const admin: Omit<User, "age"| "gender"> = {
id: 0,
name: "bob",
};
8. Exclude<T1,T2>
ππ» Exclude<T1,T2> T1 μμ T2λ₯Ό μ μΈνκ³ μ¬μ©νλ κ²
type T1 = string | number | boolean;
type T2 = Exclude<T1, number>; // π T2λ numberμ΄ μ μΈλκ³ string κ³Ό booleanλ§ λ¨κ² λλ€.
9. NonNullable
ππ» Null μ μ μΈν νμ
μ μμ±νλ€.(undefinedλ ν¨κ» μ μΈ μν¨λ€.)
type T1 = string | null | undefined | void;
type T2 = NonNullable<T1> // π T2λ string κ³Ό void λ§ λ¨κ² λλ€.
π μ°Έκ³ )
https://www.typescriptlang.org/docs/handbook/utility-types.html
https://www.youtube.com/watch?v=IeXZo-JXJjc&list=PLZKTXPmaJk8KhKQ_BILr1JKCJbR0EGlx0&index=8