πŸ“šΒ μΈλ±μŠ€ μ‹œκ·Έλ‹ˆμ²˜?

인덱슀 μ‹œκ·Έλ‹ˆμ²˜λŠ” 객체가 νŠΉμ • ν˜•μ‹μ˜ 속성을 λ™μ μœΌλ‘œ κ°€μ§ˆ 수 μžˆλ„λ‘ μ •μ˜ν•˜λŠ” 방법이닀.

{[key: T]: U} ν˜•μ‹μœΌλ‘œ μ—¬λŸ¬ keyλ₯Ό κ°€μ§ˆ 수 있으며, key와 λ§€ν•‘λ˜λŠ” valueλ₯Ό μ°Έμ‘°ν• λ•Œ μ‚¬μš©ν•œλ‹€.

type UserType = {
  [key: string]: string;
};

const user: userType = {
  name: 'μ‚¬μš©μž1',
  adress: 'μ„œμšΈνŠΉλ³„μ‹œμ–΄μ©Œκ΅¬'
}

console.log(object['name']) // μ‚¬μš©μž1

// ꡬ체적인 ν‚€ 값을 μ•Œκ³ μžˆλŠ” 경우 μΌλΆ€λ§Œ 인덱슀 μ‹œκ·Έλ‹ˆμ²˜λ‘œ λ§Œλ“€μˆ˜λ„ μžˆλ‹€.
interface MixedDictionary {
    [key: string]: number | string; // 인덱슀 μ‹œκ·Έλ‹ˆμ²˜
    fixedProperty: boolean; // λͺ…μ‹œμ μœΌλ‘œ μ •μ˜λœ 속성
}

인덱슀 μ‹œκ·Έλ‹ˆμ²˜ ν™œμš© μΌ€μ΄μŠ€

인덱슀 μ‹œκ·Έλ‹ˆμ²˜μ™€ λ¬Έμžμ—΄ λ¦¬ν„°λŸ΄

인덱슀 μ‹œκ·Έλ‹ˆμ²˜λŠ” 동적 속성을 μœ„ν•΄ "λͺ¨λ“ " λ¬Έμžμ—΄, 숫자, λ˜λŠ” 심볼 킀에 λŒ€ν•΄ νƒ€μž…μ„ μ§€μ •ν•˜λŠ” μš©λ„μ΄λ‹€.

λ”°λΌμ„œ νŠΉμ • λ¬Έμžμ—΄ λ¦¬ν„°λŸ΄λ‘œ keyλ₯Ό μ œν•œν•˜κ³  μ‹Άλ‹€λ©΄ λ§€ν•‘λœ νƒ€μž…μ΄λ‚˜ λͺ…μ‹œμ  속성 μ„ μ–Έ, Recordλ₯Ό 톡해 κ΅¬ν˜„ν•  수 μžˆλ‹€.

type SpecificKeys = 'WEB' | 'SERVER';

// λ‘˜λ‹€ λ™μΌν•˜κ²Œ λ™μž‘ν•œλ‹€.
type SpecificDictionary = {
  [key in SpecificKeys]: number;
};
type SpecificDictionary = Record<SpecificKeys, number>;

인덱슀 μ‹œκ·Έλ‹ˆμ²˜μ™€ Object.keys()

Object.keys()λŠ” 객체의 자기 속성 킀듀을 λ¬Έμžμ—΄ λ°°μ—΄λ‘œ λ°˜ν™˜ν•˜λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ λ‚΄μž₯ν•¨μˆ˜μ΄λ‹€.

β†’ 이 λ°°μ—΄μ˜ μš”μ†ŒλŠ” 객체의 ν‚€ 이름을 λ¬Έμžμ—΄λ‘œ 닀루기 λ•Œλ¬Έμ— string[] νƒ€μž…μ„ λ°˜ν™˜ν•œλ‹€.

νƒ€μž…μŠ€ν¬λ¦½νŠΈμ˜ 핡심 μ›μΉ™μœΌλ‘œ β€˜νƒ€μž… 체크λ₯Ό ν•  λ•Œ κ·Έ 값이 κ°€μ§„ ν˜•νƒœμ— μ§‘μ€‘ν•œλ‹€.’ λΌλŠ” 뢀뢄이 μžˆλŠ”λ° 이 뢀뢄이 μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 덕 타이핑과 관련이 μžˆλ‹€.

덕 타이핑 객체의 νƒ€μž…μ΄ 클래슀 상속, μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„ λ“±μœΌλ‘œ κ²°μ •λ˜λŠ” 것이 μ•„λ‹Œ μ–΄λ–€ 객체가 ν•„μš”ν•œ λ³€μˆ˜μ™€ λ©”μ„œλ“œλ§Œ μ§€λ‹ˆκ³  μžˆλ‹€λ©΄ κ·Έλƒ₯ ν•΄λ‹Ή νƒ€μž…μ— μ†ν•˜λ„λ‘ 인정해 μ£ΌλŠ” 것을 μ˜λ―Έν•œλ‹€.