1. ν€(Key)μ νλ‘νΌν°(Property)
κ°μ²΄(Object)λ μ¬λ¬ κ°μ λ°μ΄ν°λ₯Ό νλλ‘ λ¬Άμ΄ νννλ λ°μ΄ν° ꡬ쑰μ΄λ€.
κ°μ²΄ μμ κ° λ°μ΄ν° μμλ₯Ό νλ‘νΌν°λΌκ³ λΆλ₯΄λ©°, νλ‘νΌν°λ μ΄λ¦(ν€)κ³Ό κ°μΌλ‘ ꡬμ±λλ€.
const person = {
name: 'Alice',
age: 30,
job: 'Engineer'
};
name, age, jobμ keyμ΄κ³ Alice, 30, Engineerμ νλ‘νΌν°μ κ°μ΄λΌκ³ λΆλ₯Έλ€.
2. νμ (Type)
νμ μ λ³μ, 맀κ°λ³μ, ν¨μ λ±μ μ΄λ€ μ’ λ₯μ κ°μ΄λ λ°μ΄ν°κ° λ€μ΄κ° μ μλμ§λ₯Ό λͺ μνλ μν μ νλ€.
TypeScriptμμλ νμ μ μ¬μ©νμ¬ λ³μλ ν¨μμ μΈμ λ±μ κ°μ΄ μ΄λ€ ννλ₯Ό κ°μ ΈμΌ νλμ§λ₯Ό λͺ ννκ² μ§μ ν μ μμ΅λλ€.
const age: number = 25; // age λ³μλ μ«μ(number) νμ
μ κ°μ κ°μ§
const name: string = 'Bob'; // name λ³μλ λ¬Έμμ΄(string) νμ
μ κ°μ κ°μ§
3. ν€μ κ°, νλ‘νΌν°μ νμ μ μ¬μ©
κ°μ²΄μ νλ‘νΌν°λ ν€: κ°
ννλ‘ μ μλλ©°, TypeScriptμμλ νλ‘νΌν°μ κ°μ ν΄λΉνλ λ°μ΄ν° νμ
λ λͺ
μν μ μλ€.
const person: {
name: string,
age: number,
job: string
} = {
name: 'Alice',
age: 30,
job: 'Engineer'
};
4. keyofμ typeof, μ¬μ© μμ
λ¨Όμ LANGDIVλΌλ κ°μ²΄λ₯Ό μ μν΄λ³΄μ.
as const
λ κ°μ²΄μ νλ‘νΌν°μ κ°μ μμλ‘ λ§λ λ€.
export const LANGDIV = {
JAVASCRIPT: '00',
TYPESCRIPT: '01',
PYTHON: '02',
JAVA: '03',
CPP: '04',
} as const;
LANGDIVλ₯Ό μ΄μ©νμ¬ νμ Aμ Bλ₯Ό μ μΈν΄λ³΄μ.
type A = typeof LANGDIV;
type B = keyof A; // type B = keyof typeof LANGDIV; μ κ°λ€.
type Aλ LANGDIV κ°μ²΄μ νμ μ κ°λ¦¬ν¨λ€.
type Bλ A νμ μ νλ‘νΌν° μ΄λ¦(key) μ€ νλλ₯Ό λνλ΄λ νμ μ κ°λ¦¬ν€κ² λλ€.
μλμ μ½λκ° μ΄ν΄κ° λλκ°?
type C = (typeof LANGDIV)[B];
1. (typeof LANGDIV)
(typeof LANGDIV)λ LANGDIV κ°μ²΄μ νμ
μ λνλΈλ€.
μ¦, LANGDIVμ νλ‘νΌν° μ΄λ¦(ν€)μ ν΄λΉ κ°μ νμ
μ κ°μ§κ³ μλ νμ
μ΄λ€.
2. [B]
Bλ keyof A μμ μ μν νμ
μ΄λ€. μ΄λ LANGDIV κ°μ²΄μ key μ€ νλλ₯Ό κ°λ¦¬ν€λ νμ
μ΄λ€.
3. (typeof LANGDIV)[B]
μ¦, μ΄ μ½λλ B νμ
μ ν΄λΉνλ νλ‘νΌν° κ°μ λνλ΄λ νμ
μ΄λ€.
Bκ° 'PYTHON'μ΄λΌλ©΄ (typeof LANGDIV)['PYTHON')μ '02'κ° λλ€.
λ°λΌμ type Cλ '00' | '01' | '02' | '03' | '04' μ κ°μ μ λμ¨ νμ μ κ°μ§κ² λλ€.
LANGDIV κ°μ²΄μ νλ‘νΌν° κ°λ€μ λͺ¨λ ν¬ν¨νλ νμ μ΄ λλ κ²μ΄λ€.
5. μμ νμ₯
export const LANGDIV = {
JAVASCRIPT: '00',
TYPESCRIPT: '01',
PYTHON: '02',
JAVA: '03',
CPP: '04',
} as const;
export type LANGUAGE = keyof typeof LANGDIV;
export type LANGUAGE_NUM = (typeof LANGDIV)[keyof typeof LANGDIV];
μ΄λ κ² νμ μ μ μΈν΄μ€ μν©μ΄λΌκ³ ν λ μλμ μ½λλ₯Ό μ΄λ»κ² λ°κΏμ€ μ μμκΉ?
<option
key={item.num}
value={item.num}
disabled={ (dev?.front && ['03', '04'].includes(item.num)) }
>
λ¨Όμ μ΄ μ½λμ λ¬Έμ μ μ '03', '04'κ° κ°λ μ±μ΄ λ¨μ΄μ§λ€λ λ°μ μλ€.
κ°λ°μλ€μ μ΄ μ½λλ₯Ό λ³΄κ³ κΈ°νμμ λ°λ‘ μ°Ύμλ΄μΌλ§ 03κ³Ό 04μ μλ―Έκ° JAVAμ CPP λΌλ κ²μ μκ² λ κ²μ΄λ€.
μλμ κ°μ΄ μ μΈν νμ μ μ΄μ©νλ€λ©΄ μ΄ μ½λμ κ°λ μ±μ ν¬κ² ν₯μμν¬ μ μλ€.
<option
key={item.num}
value={item.num}
disabled={ (dev?.front && ['JAVA', 'CPP'].includes(item.num as LANGUAGE)) }
>
μλμ μ½λλ λ¬Όλ‘ λμνλ€. κΈ°μ‘΄ μ½λ보λ€λ as LANGUAGE_NUM μ νμ©ν΄μ€μΌλ‘μ¨ κ°λ μ±κ³Ό μμ μ±μ΄ ν₯μλμλ€κ³ λ³Ό μ μλ€.
<option
key={item.num}
value={item.num}
disabled={ (dev?.front && ['03', '04'].includes(item.num as LANGUAGE_NUM)) }
>