-
Notifications
You must be signed in to change notification settings - Fork 0
π [2μ₯] 맡λ νμ μ΄ λκΉ?
const metaData: MetadataProps = {
author: "κ·νΈ",
createdAt: 2024-03-24,
chapter: 2,
description: "맡λ νμ
μ΄ λκΉ?"
}
const { chapter, description } = metaData;
맡λ νμ
(Mapped Types)μ TypeScriptμ κ°λ ₯ν κΈ°λ₯ μ€ νλλ‘, κΈ°μ‘΄ νμ
μ λ³ννμ¬ μλ‘μ΄ νμ
μ λ§λλ λ° μ¬μ©
λ©λλ€. μ΄λ₯Ό ν΅ν΄ κΈ°μ‘΄ νμ
μμ μμ±μ νλμ© κ°μ Έμ μμ νκ±°λ μλ‘μ΄ μμ±μ μΆκ°νμ¬ νμ
μ μ μ°νκ² μ‘°μν μ μμ΅λλ€.
맡λ νμ μ κΈ°μ‘΄ νμ μ κ° μμ±μ μννλ©΄μ λ³ννλ λ° μ¬μ©λλ ν€μλμ λλ€. λ€μμ κ°μ₯ κΈ°λ³Έμ μΈ ννμ 맡λ νμ μ λλ€.
type MyMappedType = {
[Property in OldType]: NewType;
};
μ¬κΈ°μ OldTypeμ κΈ°μ‘΄ νμ μ λνλ΄κ³ , NewTypeμ ν΄λΉ μμ±μ μλ‘μ΄ νμ μ λνλ λλ€. Propertyμ κΈ°μ‘΄ νμ μ κ° μμ±μ λνλ΄λ©°, μ΄λ₯Ό ν΅ν΄ 맡λ νμ μ΄ ν΄λΉ μμ±μ μννκ³ λ³νν©λλ€.
μλ₯Ό λ€μ΄, λ€μκ³Ό κ°μ΄ μΈν°νμ΄μ€ Personμ΄ μλ€κ³ κ°μ ν΄λ΄ μλ€.
interface Person {
name: string;
age: number;
}
μ΄μ 맡λ νμ μ μ¬μ©νμ¬ Person μΈν°νμ΄μ€μ μμ±μ λ³κ²½νμ¬ μλ‘μ΄ νμ μ λ§λ€ μ μμ΅λλ€.
type ModifiedPerson = {
[Property in keyof Person]: string;
};
μ μ½λμμ [Property in keyof Person] λΆλΆμ Person μΈν°νμ΄μ€μ κ° μμ±μ μννλ λΆλΆμ λλ€. κ·Έλ¦¬κ³ stringμ κ° μμ±μ μλ‘μ΄ νμ μ λνλ λλ€. μ΄λ κ² νλ©΄ ModifiedPerson νμ μ Person μΈν°νμ΄μ€μ λμΌν μμ±μ κ°μ§μ§λ§, λͺ¨λ μμ±μ νμ μ΄ λ¬Έμμ΄λ‘ λ³κ²½λ©λλ€.
- μ νμ μμ±μ κ°μ§ νμ μ λ§λ€κΈ°
- μ½κΈ° μ μ© μμ±μ μΆκ°νκΈ°
β 맡λ νμ μ TypeScriptμμ νμ μ μ μ°νκ² λ€λ£¨κ³ μ‘°μνλ κ°λ ₯ν λκ΅¬λ‘ νμ©λ©λλ€.
맡λ νμ μ μ¬μ©νμ¬ λͺ¨λ μμ±μ μ νμ μΌλ‘ λ§λλ μμ μ½λμ λλ€.
type Partial<T> = {
[K in keyof T]?: T[K]; // κΈ°μ‘΄ νμ
Tμ λͺ¨λ μμ±μ μ νμ μΌλ‘ λ§λ¦
};
interface User {
name: string;
age: number;
}
type PartialUser = Partial<User>;
const partialUser: PartialUser = {}; // λͺ¨λ μμ±μ΄ μ νμ μΌλ‘ λ§λ€μ΄μ§ User νμ
partialUser.name = 'John'; // μ νμ μΌλ‘ λ§λ€μ΄μ§ μμ±μ΄λ―λ‘ μ¬μ© κ°λ₯
partialUser.age = 30; // μ νμ μΌλ‘ λ§λ€μ΄μ§ μμ±μ΄λ―λ‘ μ¬μ© κ°λ₯
μ μμ μ½λμμλ PartialλΌλ 맡λ νμ μ μ μνκ³ μμ΅λλ€. μ΄ λ§΅λ νμ μ μ λ ₯λ μ λ€λ¦ νμ Tμ λͺ¨λ μμ±μ μ νμ μΌλ‘ λ§λλ μν μ ν©λλ€. μ΄ν UserλΌλ μΈν°νμ΄μ€λ₯Ό μ μνκ³ , PartialUserλΌλ μλ‘μ΄ νμ μ Partialλ₯Ό ν΅ν΄ μμ±ν©λλ€. μ΄λ‘μ¨ PartialUser νμ μ User νμ μ λͺ¨λ μμ±μ μ νμ μΌλ‘ κ°μ§κ² λ©λλ€.
### 2. μ½κΈ° μ μ© μμ±μ μΆκ°νκΈ° 맡λ νμ μ μ¬μ©νμ¬ μ½κΈ° μ μ© μμ±μ μΆκ°νλ μμλ₯Ό μ΄ν΄λ³΄κ² μ΅λλ€. TypeScriptμμλ readonly ν€μλλ₯Ό μ¬μ©νμ¬ μμ±μ μ½κΈ° μ μ©μΌλ‘ λ§λ€ μ μμ΅λλ€. 맡λ νμ μ μ¬μ©νμ¬ κΈ°μ‘΄ νμ μ λͺ¨λ μμ±μ μ½κΈ° μ μ©μΌλ‘ λ§λ€μ΄λ³΄κ² μ΅λλ€.
type Readonly<T> = {
readonly [K in keyof T]: T[K]; // κΈ°μ‘΄ νμ
Tμ λͺ¨λ μμ±μ μ½κΈ° μ μ©μΌλ‘ λ§λ¦
};
interface User {
name: string;
age: number;
}
type ReadonlyUser = Readonly<User>;
const readonlyUser: ReadonlyUser = { name: 'John', age: 30 };
// μλ μ½λλ μλ¬λ₯Ό λ°μμν΅λλ€.
readonlyUser.name = 'Doe'; // μμ±μ΄ μ½κΈ° μ μ©μ΄λ―λ‘ λ³κ²½ν μ μμ
readonlyUser.age = 31; // μμ±μ΄ μ½κΈ° μ μ©μ΄λ―λ‘ λ³κ²½ν μ μμ
μ μ½λμμλ ReadonlyλΌλ 맡λ νμ μ μ μνκ³ μμ΅λλ€. μ΄ λ§΅λ νμ μ μ λ ₯λ μ λ€λ¦ νμ Tμ λͺ¨λ μμ±μ μ½κΈ° μ μ©μΌλ‘ λ§λλ μν μ ν©λλ€. κ·Έλ¦¬κ³ UserλΌλ μΈν°νμ΄μ€λ₯Ό μ μνκ³ , ReadonlyUserλΌλ μλ‘μ΄ νμ μ Readonlyλ₯Ό ν΅ν΄ μμ±ν©λλ€. μ΄λ κ² μμ±λ ReadonlyUser νμ μ User νμ μ λͺ¨λ μμ±μ μ½κΈ° μ μ©μΌλ‘ κ°μ§κ² λ©λλ€.
μ΄νμ readonlyUser κ°μ²΄λ₯Ό μμ±νκ³ , μ΄ κ°μ²΄μ μμ±μ λ³κ²½νλ €κ³ μλνλ μ½λλ₯Ό μμ±νμμ΅λλ€. νμ§λ§ μμ±μ΄ μ½κΈ° μ μ©μΌλ‘ λ§λ€μ΄μ‘κΈ° λλ¬Έμ ν΄λΉ μμ±μ λ³κ²½ν μ μμΌλ©°, μ»΄νμΌλ¬κ° μ΄λ₯Ό κ°μ§νμ¬ μλ¬λ₯Ό λ°μμν΅λλ€.
β¨π λ¬Έμ λͺ¨μ πβ¨
π [2μ₯] enumμ μ¬μ©ν΄μΌ ν κΉ?
π [2μ₯] νμ
μ§ν©μ κ°λ
κ³Ό νμ
νΈνμ±
π [2μ₯] 맡λ νμ
μ΄ λκΉ?
π [2μ₯] Typeκ³Ό Interfaceλ κ°κ° μΈμ μ¬μ©νλ κ±ΈκΉ? μ λν μ견
π [3μ₯] μΈλ±μ€λ μμΈμ€ νμ
μμ μ€λ₯ μ 보~!
π [4μ₯] νμ
μ’νκΈ°μ λ°©μ(νμ
κ°λvs νμ
λ¨μΈ)