μΌ | μ | ν | μ | λͺ© | κΈ | ν |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- μ€ν¬λ‘€κ΅¬ν
- TypeScript
- CSS
- JavaScript
- nextjs
- dart
- react native
- VanilaJS
- Frontend
- ContextAPI
- νμ΄μ¬
- HTML
- λ°±μ€
- μ£Όμμ°½ν΄μ
- router
- Redux
- Python
- react
- μ½ν
- Today
- Total
JiSoo's Devlog
[μ°μν νμ μ€ν¬λ¦½νΈ] 5μ₯ λ³Έλ¬Έ
π μ‘°κ±΄λΆ νμ
νμ μ€ν¬λ¦½νΈμμ μ‘°κ±΄λΆ νμ μ Condition ? A : B ννλ₯Ό κ°μ§λ€.
μ‘°κ±΄λΆ νμ μ νμ©νλ©΄ μ€λ³΅λλ νμ μ½λλ₯Ό μ κ±°νκ³ μν©μ λ°λΌ μ μ ν νμ μ μ»μ μ μκΈ° λλ¬Έμ μ νν νμ μΆλ‘ μ΄ κ°λ₯νλ€.
extendsμ μ λ€λ¦μ νμ©ν μ‘°κ±΄λΆ νμ
extends ν€μλλ νμ μ νμ₯ν λμ νμ μ 쑰건λΆλ‘ μ€μ ν λ μ¬μ©λλ©° μ λ€λ¦ νμ μμλ νμ μ μν λ‘λ μ¬μ©λλ€.
T extends U ? X : Y
μ‘°κ±΄λΆ νμ μμ extendsλ₯Ό μ¬μ©ν λλ μλ°μ€ν¬λ¦½νΈ μΌν μ°μ°μμ ν¨κ» μ΄λ€.
μ ννμ νμ Tλ₯Ό Uμ ν λΉν μ μμΌλ©΄ X νμ , μλλ©΄ Y νμ μΌλ‘ κ²°μ λ¨μ μλ―Ένλ€.
inferλ₯Ό νμ©ν΄μ νμ μΆλ‘ νκΈ°
extendsλ₯Ό μ¬μ©ν λ infer ν€μλλ₯Ό μ¬μ©ν μ μλ€.
inferλ νμ μ μΆλ‘ νλ μν μ νλ€.
μΌν μ°μ°μλ₯Ό μ¬μ©ν 쑰건문μ ννλ₯Ό κ°μ§λλ° extendsλ‘ μ‘°κ±΄μ μμ νκ³ inferλ‘ νμ μ μΆλ‘ νλ λ°©μμ μ·¨νλ€.
type UnpackPromise<T> = T extends Promise<infer K>[] ? K :any;
UnpackPromise νμ μ μ λ€λ¦μΌλ‘ Tλ₯Ό λ°μ Tκ° Promiseλ‘ λνλ κ²½μ°λΌλ©΄ Kλ₯Ό λ°ννκ³ κ·Έλ μ§ μμ κ²½μ°μλ anyλ₯Ό λ°ννλ€.
Promise<infer K>λ Promiseμ λ°ν κ°μ μΆλ‘ ν΄ ν΄λΉ κ°μ νμ μ Kλ‘ νλ€λ μλ―Έμ΄λ€.
π ν νλ¦Ώ 리ν°λ΄ νμ νμ©νκΈ°
νμ μ€ν¬λ¦½νΈμμλ μ λμ¨ νμ μ μ¬μ©ν΄ λ³μ νμ μ νΉμ λ¬Έμμ΄λ‘ μ§μ ν μ μλ€.
type HeaderTag = "h1" | "h2" | "h3" | "h4" | "h5";
μ΄ κΈ°λ₯μ μ¬μ©νλ©΄ μ»΄νμΌνμμ λ³μμ ν λΉλλ νμ μ νΉμ λ¬Έμμ΄λ‘ μ νν κ²μ¬ν΄ ν΄λ¨Ό μλ¬λ₯Ό λ°©μ§ν μ μκ³ μλ μμ± κΈ°λ₯μ ν΅ν΄ κ°λ° μμ°μ±μ λμΌ μ μλ€.
ν νλ¦Ώ 리ν°λ΄ νμ μ μλ°μ€ν¬λ¦½νΈμ ν νλ¦Ώ 리ν°λ΄ λ¬Έλ²μ μ¬μ©ν΄ νΉμ λ¬Έμμ΄μ λν νμ μ μ μΈν μ μλ κΈ°λ₯μ΄λ€.
type Heading Number = 1 | 2 | 3 | 4 | 5;
type HeaderTag = `h${HeadingNumber}`;
type Vertical = "top" | "bottom";
type Horizon = "left" | "right";
type Direction = Vertical } `${Vertical}${Capitalize<Horizon>}`;
ν νλ¦Ώ 리ν°λ΄ νμ μ μ¬μ©νλ©΄ λμ± μ½κΈ° μ¬μ΄ μ½λλ‘ μμ± κ°λ₯νκ³ μ½λλ₯Ό μ¬μ¬μ©νκ³ μμ νλ λ° μ©μ΄ν νμ μ μ μΈν μ μλ€.
μ£Όμν μ
μ»΄νμΌλ¬κ° μ λμ¨μ μΆλ‘ νλ λ° μκ°μ΄ μ€λ 걸리면 λΉν¨μ¨μ μ΄λΌ νμ μ μΆλ‘ νμ§ μκ³ μλ¬λ₯Ό λ΄λ±μ λκ° μλ€.
λ°λΌμ ν νλ¦Ώ 리ν°λ΄ νμ μ μ½μ λ μ λμ¨ μ‘°ν©μ κ²½μ°μ μκ° λ무 λ§μ§ μκ² μ μ ν λλ νμ μ μ μνλ κ² μ’λ€.
πΆ 컀μ€ν μ νΈλ¦¬ν° νμ νμ©νκΈ°
νμ μ€ν¬λ¦½νΈμμ μ 곡νλ μ νΈλ¦¬ν° νμ λ§μΌλ‘ νννλ λ° νκ³κ° μμ λ 컀μ€ν μ νΈλ¦¬ν° νμ μ μ¬μ©νλ©΄ λλ€.
μ νΈλ¦¬ν° ν¨μλ₯Ό νμ©ν΄ styled-componentsμ μ€λ³΅ νμ μ μΈ νΌνκΈ°
리μ‘νΈ μ»΄ν¬λνΈ κ΅¬ν μ μ¬λ¬ μ΅μ μ propsλ‘ λ°μ μ μ°ν μ»΄ν¬λνΈλ‘ λ§λ€ μ μλ€.
μ€νμΌ κ΄λ ¨ propsλ styled-componentsμ μ λ¬λλ©° styled-componentsμλ ν΄λΉ νμ μ μ νν μμ±ν΄μΌ νλ€.
μ΄λ° κ²½μ° Pick, Omit κ°μ μ νΈλ¦¬ν° νμ μ μ νμ©ν΄ μ½λλ₯Ό κ°κ²°νκ² μμ±ν μ μλ€.
Pick μ νΈλ¦¬ν° νμ μ νμ©ν΄ νμ μ μ μνλ©΄ μ€λ³΅λ μ½λλ₯Ό μμ±νμ§ μμλ λκ³ μ μ§λ³΄μλ₯Ό λμ± νΈλ¦¬νκ² ν μ μλ€.
PickOne μ νΈλ¦¬ν° ν¨μ
νμ μ€ν¬λ¦½νΈμλ μλ‘ λ€λ₯Έ 2κ° μ΄μμ κ°μ²΄λ₯Ό μ λμ¨ νμ μΌλ‘ λ°μ λ νμ κ²μ¬κ° μ λλ‘ μ§νλμ§ μλ μ΄μκ° μλ€.
μ΄λ° λ¬Έμ ν΄κ²°μ μν΄ PickOne μ νΈλ¦¬ν° ν¨μλ₯Ό μ¬μ©ν μ μλ€.
type Card = {
card: string
};
type Account = {
account: string
};
function withdraw(type: Card | Account) {
...
}
withdraw({ card: "tyundai", account: "hana" });
μ μ½λμ²λΌ Cardλ Account μ€ νλλ§ λ°κ³ μΆμ μν©μμ μ λ κ² νμ μ μμ±νλ©΄ μλλλ‘ νμ κ²μ¬κ° μ΄λ€μ§μ§ μλλ€.
withdraw ν¨μμ μΈμλ‘ λ μ€ νλλ§ λ°κ³ μΆμ§λ§ μ€μ λ‘λ card, account μμ± λ λ€ λ°μλ νμ μλ¬κ° λ°μνμ§ μλλ€.
μ΄ μ΄μ λ μ§ν© κ΄μ μΌλ‘ λ³Ό λ μ λμ¨μ ν©μ§ν©μ΄ λκΈ° λλ¬Έμ΄λ€.
μ΄λ° λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ μλ³ν μ μλ μ λμ¨ κΈ°λ²μ μμ£Ό νμ©νλ€.
μλ³ν μ μλ μ λμ¨μΌλ‘ κ°μ²΄ νμ μ μ λμ¨μΌλ‘ λ°κΈ°
μλ³ν μ μλ μ λμ¨μ κ° νμ μ typeμ΄λΌλ κ³΅ν΅ μμ±μ μΆκ°ν΄ ꡬλΆμ§λ λ°©λ²μ΄λ€.
type Card = {
type: "card";
card: string;
};
type Account = {
type: "account";
account: string;
};
function withdraw(type: Card | Account) {
...
}
withdraw({ type: "card", card: "hyundai" });
withdraw({ type: "account", account: "hana" });
μμ²λΌ μλ³ν μ μλ μ λμ¨μ νμ©νλ©΄ 곡ν΅λ μμ±μΈ typeμ κΈ°μ€μΌλ‘ κ°μ²΄λ₯Ό ꡬλΆν μ μμ΄ withdraw ν¨μλ₯Ό μ¬μ©νλ κ³³μμ μ νν νμ μ μΆλ‘ ν μ μκ² λλ€.
NonNullable νμ κ²μ¬ ν¨μλ₯Ό μ¬μ©νμ¬ κ°νΈνκ² νμ κ°λνκΈ°
nullμ κ°μ§ μ μλ κ°μ null μ²λ¦¬λ μμ£Ό μ¬μ©λλ νμ κ°λ ν¨ν΄μ νλμ΄λ€.
μΌλ°μ μΌλ‘ ifλ¬Έμ μ¬μ©ν΄ null μ²λ¦¬ νμ κ°λλ₯Ό μ μ©νμ§λ§ is ν€μλμ NonNullable νμ μΌλ‘ νμ κ²μ¬λ₯Ό μν μ νΈ ν¨μλ₯Ό λ§λ€μ΄ μ¬μ©ν μλ μλ€.
NonNullable νμ μ΄λ
μ λ€λ¦μΌλ‘ λ°λ Tκ° nullμ΄λ undefinedμΌ λ never λλ Tλ₯Ό λ°ννλ νμ μ΄λ€.
NonNullableμ μ¬μ©νλ©΄ nullμ΄λ undefinedκ° μλ κ²½μ°λ₯Ό μ μΈν μ μλ€.
type NonNullable<T> = T extends null | undefined ? never : T;
null, undefinedλ₯Ό κ²μ¬ν΄μ£Όλ NonNullable ν¨μ
NonNullable μ νΈλ¦¬ν° νμ μ μ¬μ©ν΄ nullμ΄λ undefinedλ₯Ό κ²μ¬ν΄ μ£Όλ νμ κ°λ ν¨μλ₯Ό λ§λ€μ΄ μΈ μ μλ€.
NonNullable ν¨μλ λ§€κ°λ³μμΈ valueκ° nullμ΄λ undefinedλΌλ©΄ falseλ₯Ό λ°ννλ€.
π½ λΆλ³ κ°μ²΄ νμ μΌλ‘ νμ©νκΈ°
μμ«κ°μ κ΄λ¦¬ν λ κ°μ²΄λ₯Ό μ¬μ©νλλ° theme κ°μ²΄, μ λλ©μ΄μ κ°μ²΄ λ± λ€μνκ² νμ©λλ€.
μ΄λ° κ°μ²΄λ₯Ό μ¬μ©ν λ μ΄λ¦° νμ μΌλ‘ μ€μ ν μ μλ€.
keof, as constλ‘ κ°μ²΄ νμ μ ꡬ체μ μ μ€μ νλ©΄ νμ μ λ§μ§ μλ κ°μ μ λ¬ν κ²½μ° νμ μλ¬κ° λ°νλκΈ° λλ¬Έμ μ»΄νμΌ λ¨κ³μμ λ°μν μ μλ μ€μλ₯Ό λ°©μ§ν μ μκ³ μλ μμ± κΈ°λ₯μ ν΅ν΄ κ°μ²΄μ μ΄λ€ κ°μ΄ μλμ§ μ½κ² νμ ν μ μλ€.
Atom μ»΄ν¬λνΈμμ theme style κ°μ²΄ νμ©νκΈ°
Atom λ¨μμ μμ μ»΄ν¬λνΈλ ν°νΈ ν¬κΈ°, μμ λ± λ€μν νκ²½μμ μ μ°νκ² μ¬μ©λ μ μκ² κ΅¬νλμ΄μΌ νλλ° μ΄λ° μ€μ κ°μ propsλ‘ λκ²¨μ£Όκ² μ€κ³νλ€.
propsλ‘ μ§μ μμ κ°μ λκ²¨μ€ μλ μμ§λ§ κ·Έλ¬λ©΄ μ¬μ©μκ° λͺ¨λ μμ κ°μ μΈμ§ν΄μΌ νκ³ λ³κ²½μ μ·¨μ½ν μνκ° λλ€.
μ΄λ° λ¬Έμ ν΄κ²°μ μν΄ μ¬λ¬ νλ‘μ νΈμμλ μ€νμΌ κ°μ κ΄λ¦¬νλ theme κ°μ²΄λ₯Ό λκ³ κ΄λ¦¬νλ€.
Atom μ»΄ν¬λνΈμμλ theme κ°μ²΄μ μμ, ν°νΈ μ¬μ΄μ¦μ ν€κ°μ propsλ‘ λ°μ λ€ theme κ°μ²΄μμ κ°μ λ°μμ€λλ‘ μ€κ³νλ€.
keyof μ°μ°μλ‘ κ°μ²΄μ ν€κ°μ νμ μΌλ‘ μΆμΆνκΈ°
keyof μ°μ°μλ κ°μ²΄ νμ μ λ°μ ν΄λΉ κ°μ²΄μ ν€κ°μ string λλ numberμ 리ν°λ΄ μ λμ¨ νμ μ λ°ννλ€.
κ°μ²΄ νμ μΌλ‘ μΈλ±μ€ μκ·Έλμ²κ° μ¬μ©λμλ€λ©΄ keyofλ μΈλ±μ€ μκ·Έλμ²μ ν€ νμ μ λ°ννλ€.
interface ColorType {
red: string;
green: string;
blue: string;
}
type ColorKeyType = keyof ColorType; //'red' | 'green' | 'blue'
typeof μ°μ°μλ‘ κ°μ νμ μΌλ‘ λ€λ£¨κΈ°
keyof μ°μ°μλ κ°μ²΄ νμ μ λ°κΈ° λλ¬Έμ κ°μ²΄μ ν€κ°μ νμ μΌλ‘ λ€λ£¨λ €λ©΄ κ° κ°μ²΄λ₯Ό νμ μΌλ‘ λ³νν΄μΌ νλ€.
μ΄λ typeof μ°μ°μλ₯Ό νμ©ν μ μλλ° λ³μλ μμ±μ νμ μ μΆλ‘ νλ μν μ νλ€.
typeof μ°μ°μλ λ¨λ μΌλ‘ μ¬μ©λκΈ°λ³΄λ€ μ£Όλ‘ ReturnTypeκ°μ΄ μ νΈλ¦¬ν° νμ μ΄λ keyof μ°μ°μμ²λΌ νμ μ λ°λ μ°μ°μμ ν¨κ» μ°μΈλ€.
const colors = {
red: "#F45452",
green: "#0C952A",
blue: "#1A7CFF",
};
type ColorsType = typeof colors;
/**
{
red: string;
green: string;
blue: string;
}
*/
'Frontend > Typescript' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[μ°μν νμ μ€ν¬λ¦½νΈ] 6μ₯ (1) | 2025.05.29 |
---|---|
[μ°μν νμ μ€ν¬λ¦½νΈ] 4μ₯ (2) | 2025.05.23 |
[μ°μν νμ μ€ν¬λ¦½νΈ] 3μ₯ (0) | 2025.05.09 |
[μ°μν νμ μ€ν¬λ¦½νΈ] 2μ₯ (1) | 2025.05.09 |
[μ°μν νμ μ€ν¬λ¦½νΈ] 1μ₯ (11) | 2025.04.30 |