[μ°μν νμ μ€ν¬λ¦½νΈ] 4μ₯
π νμ νμ₯νκΈ°
νμ νμ₯μ κΈ°μ‘΄ νμ μ μ¬μ©ν΄ μλ‘μ΄ νμ μ μ μνλ κ²μ λ§νλ€.
κΈ°λ³Έμ μΌλ‘ interfaceμ type ν€μλλ₯Ό μ¬μ©ν΄μ νμ μ μ μνκ³ extends, κ΅μ°¨ νμ , μ λμ¨ νμ μ μ¬μ©ν΄ νμ μ νμ₯νλ€.
νμ νμ₯μ μ₯μ
νμ νμ₯μ ν° μ₯μ μ μ½λ μ€λ³΅μ μ€μΌ μ μλ€λ κ²μ΄λ€.
μ€λ³΅λλ νμ μ λ°λ³΅μ μΌλ‘ μ μΈνλ κ²λ³΄λ€ κΈ°μ‘΄μ μμ±ν νμ μ λ°νμΌλ‘ νμ νμ₯μ ν¨μΌλ‘μ¨ λΆνμν μ½λ μ€λ³΅μ μ€μΌ μ μλ€.
type BaseMenuItem = {
itemName: string | nill;
itemImageUrl: string | null;
itemDiscountAmount: number;
stock: number | null;
};
type BaseCartItem = {
quantity: number;
} & BaseMenuItem;
μ λμ¨ νμ
μ λμ¨ νμ μ 2κ° μ΄μμ νμ μ μ‘°ν©νμ¬ μ¬μ©νλ λ°©λ²μ΄λ€.
type MyUnion = A | B;
Aμ Bμ μ λμ¨ νμ μΈ MyUnionμ νμ Aμ Bμ ν©μ§ν©μ΄λ€.
μ§ν© Aμ λͺ¨λ μμ, μ§ν© Bμ λͺ¨λ μμλ μ§ν© MyUnionμ μμμ΄λ€.
μ λμ¨ νμ μΌλ‘ μ μΈλ κ°μ μ λμ¨ νμ μ ν¬ν¨λ λͺ¨λ νμ μ΄ κ³΅ν΅μΌλ‘ κ°κ³ μλ μμ±μλ§ μ κ·Όν μ μλ€.
κ΅μ°¨ νμ
κ΅μ°¨ νμ μ κΈ°μ‘΄ νμ μ ν©μ³ νμν λͺ¨λ κΈ°λ₯μ κ°μ§ νλμ νμ μ λ§λλ κ²μΌλ‘ μ΄ν΄ν μ μλ€.
interface CookingStep {
orderId: string;
time: number;
price: number;
}
interface DeliveryStep {
orderId: string;
time: number;
distance: string;
}
type BaedalProgress = CookingStep & DeliveryStep;
BaedalProgressλ CookingStepκ³Ό DeliveryStep νμ μ ν©μ³ λͺ¨λ μμ±μ κ°μ§ λ¨μΌ νμ μ΄ λλ€.
type MyIntersection = A & B;
κ΅μ°¨ νμ μ κ΅μ§ν©μ κ°λ κ³Ό λΉμ·νλ€.
MyIntersection νμ μ λͺ¨λ κ°μ Aνμ κ³Ό B νμ μ κ°μ΄λ€.
extendsμ κ΅μ°¨ νμ
type BaseMenuItem {
itemName: string | null;
itemImageUrl: string | null;
itemDiscountAmount: number;
stock: number | null;
};
type BaseCartItem {
quantity: number;
} & BaseMenuItem;
const baseCartItem: BaseCartItem = {
itemName: "λ‘λ³Άμ΄",
itemImageUrl: "https://www.wowoo/fwfw.png",
itemDiscountAmount: 200,
stck: 100,
quantity: 2,
};
BaseCartItemμ quantityλΌλ μλ‘μ΄ μμ±κ³Ό BaseMenuItemμ λͺ¨λ μμ±μ κ°μ§ λ¨μΌ νμ μ΄λ€.
μ λμ¨ νμ κ³Ό κ΅μ°¨ νμ μ μ¬μ©ν μλ‘μ΄ νμ μ μ€μ§ typeμΌλ‘λ§ μ μΈν μ μλ€.
π‘οΈ νμ μ’νκΈ° - νμ κ°λ
νμ κ°λμ λ°λΌ λΆκΈ° μ²λ¦¬νκΈ°
νμ μ€ν¬λ¦½νΈμμμ λΆκΈ° μ²λ¦¬λ 쑰건문과 νμ κ°λλ₯Ό νμ©νμ¬ λ³μλ ννμμ νμ λ²μλ₯Ό μ’ν λ€μν μν©μ λ°λΌ λ€λ₯Έ λμμ μννλ κ²μ λ§νλ€.
νμ κ°λλ λ°νμμ 쑰건문μ μ¬μ©ν΄ νμ μ κ²μ¬νκ³ νμ λ²μλ₯Ό μ’νμ£Όλ κΈ°λ₯μ λ§νλ€.
νμ μ€ν¬λ¦½νΈλ‘ κ°λ° μ μ¬λ¬ νμ μ ν λΉν μ μλ μ€μ½νμμ νΉμ νμ μ 쑰건μΌλ‘ λ§λ€μ΄ λΆκΈ° μ²λ¦¬νκ³ μΆμ λκ° μλ€.
μ¬λ¬ νμ μ ν λΉν μ μλ€λ κ²μ λ³μκ° μ λμ¨ νμ λλ any νμ λ± μ¬λ¬ νμ μ λ°μ μ μλ€λ κ²μ λ§νλλ° μ‘°κ±΄μΌλ‘ κ²μ¬νλ €λ νμ λ³΄λ€ λμ λ²μλ₯Ό κ°κ³ μλ€.
μ€μ½ν
νμ μ€ν¬λ¦½νΈμμ μ€μ½νλ λ³μμ ν¨μ λ±μ μλ³μκ° μ ν¨ν λ²μλ₯Ό λνλΈλ€.
μ¦, λ³μμ ν¨μλ₯Ό μ μΈνκ±°λ μ¬μ©ν μ μλ μμμ λ§νλ€.
νμ κ°λλ ν¬κ² μλ°μ€ν¬λ¦½νΈ μ°μ°μλ₯Ό μ¬μ©ν νμ κ°λμ μ¬μ©μ μ μ νμ κ°λλ‘ κ΅¬λΆ κ°λ₯νλ€.
μλ°μ€ν¬λ¦½νΈ μ°μ°μλ₯Ό νμ©ν νμ κ°λλ typeof, instanceof, inκ³Ό κ°μ μ°μ°μλ₯Ό μ¬μ©ν΄ μ μ΄λ¬ΈμΌλ‘ νΉμ νμ κ°μ κ°μ§ μλ°μ μλ μν©μ μ λνμ¬ μμ°μ€λ½κ² νμ μ μ’νλ λ°©μμ΄λ€.
μλ°μ€ν¬λ¦½νΈ μ°μ°μλ₯Ό μ¬μ©νλ μ΄μ λ λ°νμμ μ ν¨ν νμ κ°λλ₯Ό λ§λ€κΈ° μν΄μλ€.
μ¬μ©μ μ μ νμ κ°λλ μ¬μ©μκ° μ§μ μ΄λ€ νμ μΌλ‘ κ°μ μ’νμ§λ₯Ό μ§μ μ§μ νλ λ°©μμ΄λ€.
μμ νμ μ μΆλ‘ ν λ: typeof μ°μ°μ νμ©νκΈ°
typeof μ°μ°μλ₯Ό νμ©νλ©΄ μμ νμ μ λν΄ μΆλ‘ ν μ μλ€. typeof A === Bλ₯Ό 쑰건μΌλ‘ λΆκΈ° μ²λ¦¬νλ©΄, ν΄λΉ λΆκΈ° λ΄μμλ Aμ νμ μ΄ Bλ‘ μΆλ‘ λλ€.
typeof μ°μ°μλ μ£Όλ‘ μμ νμ μ μ’νλ μ©λλ‘λ§ μ¬μ©ν κ²μ κΆμ₯νλ€.
- string, number, boolean, undefined, object, function, bigint, symbol
const replaceHyphen: (date: string | Date) => string | Date = (date) => {
if (typeof date === "string") {
// μ΄ λΆκΈ°μμλ dateμ νμ
μ΄ stringμΌλ‘ μΆλ‘ λλ€
return date.replace(/-/g, "/");
}
return date;
};
μΈμ€ν΄μ€νλ κ°μ²΄ νμ μ νλ³ν λ: instanceof μ°μ°μ νμ©νκΈ°
instanceof μ°μ°μλ μΈμ€ν΄μ€νλ κ°μ²΄ νμ μ νλ³νλ νμ κ°λλ‘ μ¬μ©ν μ μλ€.
A instanceof B ννλ‘ μ¬μ©νλ©° Aμλ νμ μ κ²μ¬ν λμ λ³μ, Bμλ νΉμ κ°μ²΄μ μμ±μκ° λ€μ΄κ°λ€.
instanceofλ Aμ νλ‘ν νμ 체μΈμ μμ±μ Bκ° μ‘΄μ¬νλμ§λ₯Ό κ²μ¬ν΄ μ‘΄μ¬νλ€λ©΄ true, κ·Έλ μ§ μλ€λ©΄ falseλ₯Ό λ°ννλ€.
κ°μ²΄μ μμ±μ΄ μλμ§ μλμ§μ λ°λ₯Έ ꡬλΆ: in μ°μ°μ νμ©νκΈ°
in μ°μ°μλ κ°μ²΄μ μμ±μ΄ μλμ§ νμΈν λ€μμ trueλ falseλ₯Ό λ°ννλ€.
in μ°μ°μλ₯Ό μ¬μ©νλ©΄ μμ±μ΄ μλμ§ μλμ§μ λ°λΌ κ°μ²΄ νμ μ ꡬλΆν μ μλ€.
in μ°μ°μλ A in Bμ ννλ‘ μ¬μ©νλλ° μ΄λ¦ κ·Έλλ‘ AλΌλ μμ±μ΄ B κ°μ²΄μ μ‘΄μ¬νλμ§λ₯Ό κ²μ¬νλ€.
μλ°μ€ν¬λ¦½νΈμ in μ°μ°μλ λ°νμμ κ°λ§μ κ²μ¬νμ§λ§ νμ μ€ν¬λ¦½νΈμμλ κ°μ²΄ νμ μ μμ±μ΄ μ‘΄μ¬νλμ§λ₯Ό κ²μ¬νλ€.
μ¬λ¬ κ°μ²΄ νμ μ μ λμ¨ νμ μΌλ‘ κ°μ§κ³ μμ λ in μ°μ°μλ₯Ό μ¬μ©ν΄ μμ±μ μ 무μ λ°λΌ 쑰건 λΆκΈ°λ₯Ό ν μ μλ€.
is μ°μ°μλ‘ μ¬μ©μ μ μ νμ κ°λ λ§λ€μ΄ νμ©νκΈ°
μ§μ νμ κ°λ ν¨μλ₯Ό λ§λ€ μ μλλ° μ΄λ° λ°©μμ νμ κ°λλ λ°ν νμ μ΄ νμ λͺ μ μΈ ν¨μλ₯Ό μ μνμ¬ μ¬μ©ν μ μλ€.
νμ λͺ μ λ A is B νμμΌλ‘ μμ±νλ©΄ λλλ° μ¬κΈ°μ Aλ λ§€κ°λ³μ μ΄λ¦μ΄κ³ Bλ νμ μ΄λ€.
νμ λͺ μ
νμ λͺ μ λ ν¨μμ λ°ν νμ μ λν νμ κ°λλ₯Ό μννκΈ° μν΄ μ¬μ©λλ νΉλ³ν ννμ ν¨μμ΄λ€.
π€© νμ μ’νκΈ° - μλ³ν μ μλ μ λμ¨
νκ·Έ λ μ λμ¨μΌλ‘λ λΆλ¦¬λ μλ³ν μ μλ μ λμ¨μ νμ μ’νκΈ°μ λ리 μ¬μ©λλ λ°©μμ΄λ€.
μλ¬ μ μνκΈ°
type ErrorFeedbackType = TextError | ToastError | AlertError;
const errorArr: ErrorFeedbackType[] = [
{ errorCode: "100", errorMessage: "ν
μ€νΈ μλ¬" },
{ errorCode: "200", errorMessage: "ν μ€νΈ μλ¬", toastShowDuration: 3000 },
{ errorCode: "300", errorMessage: "μΌλΏ μλ¬", onConfirm: () => {} },
};
μλ³ν μ μλ μ λμ¨
μλ¬ νμ μ ꡬλΆν λ°©λ²μ΄ νμνλ€. κ° νμ μ΄ λΉμ·ν ꡬ쑰λ₯Ό κ°μ§μ§λ§ μλ‘ νΈνλμ§ μλλ‘ λ§λ€μ΄μ£ΌκΈ° μν΄μλ νμ λ€μ΄ μλ‘ ν¬ν¨ κ΄κ³λ₯Ό κ°μ§μ§ μλλ‘ μ μν΄μΌ νλ€.
μλ³ν μ μλ μ λμ¨μ΄λ νμ κ°μ ꡬ쑰 νΈνμ λ§κΈ° μν΄ νμ λ§λ€ ꡬλΆν μ μλ νλ³μλ₯Ό λ¬μμ£Όμ΄ ν¬ν¨ κ΄κ³λ₯Ό μ κ±°νλ κ²μ΄λ€.
μλ³ν μ μλ μ λμ¨μ νλ³μ μ μ
μλ³ν μ μλ μ λμ¨μ μ¬μ©ν λ μ£Όμν μ μ΄ μλ€.
μλ³ν μ μλ μ λμ¨μ νλ³μλ μ λ νμ μΌλ‘ μ μΈλμ΄μΌ μ μμ μΌλ‘ λμνλ€.
μ λ νμ μ λ€λ₯Έ νμ μΌλ‘ μͺΌκ°μ§μ§ μκ³ μ€μ§ νλμ μ νν κ°μ κ°μ§λ νμ μ λ§νλ€.
null, undefined, 리ν°λ΄ νμ μ λΉλ‘―ν΄ true, 1 λ± μ νν κ°μ λνλ΄λ νμ μ΄ μ λ νμ μ ν΄λΉνλ€.
void, string, numberμ κ°μ νμ μ μ λ νμ μΌλ‘ μ μ©λμ§ μλλ€.
β¨ Exhaustiveness CheckingμΌλ‘ μ νν νμ λΆκΈ° μ μ§νκΈ°
Exhausitiveness Checkingμ λͺ¨λ μΌμ΄μ€μ λν΄ μ² μ νκ² νμ μ κ²μ¬νλ κ²μ λ§νλ©° νμ μ’νκΈ°μ μ¬μ©λλ ν¨λ¬λ€μ μ€ νλλ€.
νμ κ°λλ₯Ό μ¬μ©ν΄ νμ μ λν λΆκΈ° μ²λ¦¬λ₯Ό μννλ©΄ νμνλ€κ³ μκ°λλ λΆλΆλ§ λΆκΈ° μ²λ¦¬λ₯Ό νμ¬ μꡬ μ¬νμ λ§λ μ½λλ₯Ό μμ±ν μ μκ² λλ€.
type ProductPrice = "10000" | "20000" | "5000";
const getProductName = (productPrice: ProductPrice): string => {
if (productPrice === "10000") return "λ°°λ―ΌμνκΆ 1λ§ μ";
if (productPrice === "20000") return "λ°°λ―ΌμνκΆ 2λ§ μ";
// if (productPrice === "5000") return "λ°°λ―ΌμνκΆ 5μ² μ";
else {
exhaustiveCheck(productPrice); // Error: Argument of type 'string' is not assignable to parameter of type 'never'
return "λ°°λ―ΌμνκΆ";
}
};
cosnt exhaustiveCheck = (param: never) => {
throw new Error("type error!");
};
μ μ½λμμμ²λΌ λͺ¨λ μΌμ΄μ€μ λν λΆκΈ° μ²λ¦¬λ₯Ό ν΄μ£Όμ§ μμμ λ, μ»΄νμΌνμ μλ¬κ° λ°μνκ² λλ κ²μ Exhaustiveness Checkingμ΄λΌκ³ νλ€.