νμ μ€ν¬λ¦½νΈλ₯Ό μ¬μ©νλ μ΄μ μ λν΄μ μ€λͺ ν΄μ£ΌμΈμ.
κ°μ₯ ν° μ΄μ λ μ μ νμ μμ€ν μ μ§μνλ€λ μ μ λλ€.
μ½λλ₯Ό μ€ννκΈ° μ μΈ μ»΄νμΌ νμμ νμ κ΄λ ¨ μ€λ₯λ₯Ό 미리 λ°κ²¬ν΄μ μμ ν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ λ°νμμμ λ°μν μ μλ λ§μ λ²κ·Έλ₯Ό μ€μ¬ μ½λμ μμ μ±μ ν₯μμν¬ μ μμ΅λλ€.
νμ μ€ν¬λ¦½νΈμ μλ°μ€ν¬λ¦½νΈμ μ°¨μ΄λ 무μμΈκ°μ?
JavaScriptμ TypeScriptμ κ°μ₯ ν° μ°¨μ΄μ μ 2κ°μ§κ° μμ΅λλ€.
첫λ²μ§Έλ‘, JavaScriptμ κ²½μ° λμ νμ μΌλ‘ λ³μμ νμ μ΄ λ°νμμ κ²°μ λμ§λ§, TypeScriptλ μ μ νμ μΌλ‘ μ»΄νμΌ λ¨κ³μμ νμ μ κ²μ¬ν©λλ€.
λλ²μ§Έλ‘, μ»΄νμΌ λ¨κ³μμ JavaScriptλ λΈλΌμ°μ λ Node.jsμμ λ°λ‘ μ€νλμ§λ§ TypeScriptλ JavaScriptλ‘ νΈλμ€νμΌ λ νμ μ€νλ©λλ€.
νμ μ€ν¬λ¦½νΈλ‘ μμ±λ μ½λμ μ±λ₯μ μλ°μ€ν¬λ¦½νΈμ λΉκ΅νμ λ μ΄λ€κ°μ?
TypeScriptλ‘ μμ±λ μ½λμ μ±λ₯μ JavaScriptμ λμΌν©λλ€.
TypeScriptλ μ»΄νμΌ νμμ νμ κ²μ¬λ₯Ό ν΅ν΄ μ½λμ νμ§μ λμ΄μ§λ§, μ΅μ’ μ μΌλ‘ λ³νλλ μ½λλ JavaScriptλ‘ μ»΄νμΌλκΈ° λλ¬Έμ μ€ν μ±λ₯μλ μ°¨μ΄κ° μμ΅λλ€.
νμ μ€ν¬λ¦½νΈμ νμ μμ€ν μ λ°νμμ μ΄λ»κ² λμνλμ?
TypeScriptμ νμ μμ€ν μΒ μ»΄νμΌ νμμλ§ λμνλ©°, λ°νμμλ νμ μ λ³΄κ° μ κ±°λ©λλ€. TypeScriptλ μ½λκ° μ€νλκΈ° μ μ νμ κ²μ¬λ₯Ό ν΅ν΄ μ€λ₯λ₯Ό κ²μΆν©λλ€. νμ§λ§ μ»΄νμΌ ν μμ±λλ JavaScript μ½λμλΒ νΈλμ€νμΌλ§λμ΄ νμ μ λ³΄κ° ν¬ν¨λμ§ μμΌλ―λ‘, μ€μ μ€ν μμλ νμ κ²μ¬κ° μ΄λ£¨μ΄μ§μ§ μμ΅λλ€.
νμ μ€ν¬λ¦½νΈμ μ»΄νμΌλ§ κ³Όμ μ λν΄μ μ€λͺ ν΄μ£ΌμΈμ.
- νμ μ€ν¬λ¦½νΈ μ½λ μμ±:Β λ¨Όμ κ°λ°μλΒ .tsΒ λλΒ .tsxΒ νμ₯μλ₯Ό κ°μ§ νμΌμ νμ μ€ν¬λ¦½νΈ λ¬Έλ²μ μ¬μ©ν΄μ μ½λλ₯Ό μμ±ν©λλ€.
- νμ μ€ν¬λ¦½νΈ μ»΄νμΌλ¬(TSC) μ€ν:Β μμ±λ νμ μ€ν¬λ¦½νΈ μ½λλνμ μ€ν¬λ¦½νΈ μ»΄νμΌλ¬(tsc)λ₯Ό μ¬μ©ν΄μ μλ°μ€ν¬λ¦½νΈ μ½λλ‘ λ³ννλ κ³Όμ μ΄ νμν©λλ€. μ΄ μ»΄νμΌ λ¨κ³μμ νμ κ²μ¬μ κ°μ μμ λ€μ΄ μ΄λ£¨μ΄μ§λλ€.
- μλ°μ€ν¬λ¦½νΈ μ½λ μμ±:Β μ»΄νμΌ κ³Όμ μ κ²°κ³Όλ‘, νμ μ λ³΄κ° μ κ±°λκ³ μ€μ λ νκ² λ²μ μ λ¬Έλ²μ λ°λ₯΄λΒ .jsΒ νμΌμ΄ μμ±λ©λλ€.
- μλ°μ€ν¬λ¦½νΈ μ½λ μ€ν:Β μ΄λ κ² μμ±λΒ μμν μλ°μ€ν¬λ¦½νΈ νμΌμ λΈλΌμ°μ λ Node.js νκ²½μμ λ‘λνμ¬Β μ€νν©λλ€. μ΄ λ¨κ³μμλ λ μ΄μ νμ μ€ν¬λ¦½νΈμ μ§μ μ μΈ κ΄λ ¨μ μκ³ , μΌλ°μ μΈ μλ°μ€ν¬λ¦½νΈ μ€ν κ³Όμ κ³Ό λμΌνκ² μ§νλ©λλ€.
interfaceμ typeμ μ°¨μ΄μ μ λν΄ μ€λͺ ν΄μ£ΌμΈμ.
interfaceλ κ°μ²΄ ννμ νμ₯μ μ 리νκ³ , typeμ νν, μ λμ¨ λ± λ 볡μ‘ν νμ μ‘°ν©μ μ 리ν©λλ€.
-
νμ₯(μμ) νλ λ²
interfaceλ extends ν€μλλ₯Ό μ΄μ©ν΄μ νμ₯νκ³ , typeμ & κΈ°νΈλ‘ νμ₯ν μ μλ€.
-
μ μΈμ νμ₯
interfaceλ κ°μ μ΄λ¦μΌλ‘ μ€λ³΅ μ μΈ μ μλμΌλ‘ λ³ν©λλ©° νμ₯μ μ 리νμ§λ§, typeμ μ€λ³΅ μ μΈ μ μ€λ₯κ° λ°μν©λλ€.
-
볡μ‘ν νμ μ μΈ
typeμ νν, μ λμ¨( | ), μ‘°κ±΄λΆ νμ λ± λ€μν κ³ κΈ νμ μ μΈμ΄ κ°λ₯νμ§λ§, interfaceλ κ°μ²΄ νμ μΌλ‘λ§ μ νλ©λλ€. (λ¨, interfaceμμ μ λμ¨ νμ μ κ°μ²΄μ μμ± νμ μΌλ‘λ μ¬μ© κ°λ₯νλ©°, νμ μ체λ₯Ό μ λμ¨μΌλ‘ μ μνλ κ²μ λΆκ°λ₯ν©λλ€.)
-
μλ£ν(type)
interfaceλ κ°μ²΄ νμ μλ§ μ¬μ©ν μ μκ³ . typeμ κ°μ²΄λΏλ§ μλλΌ λ¬Έμμ΄, μ«μ λ± μμ νμ λ μ μν μ μμ΅λλ€.
μ λ€λ¦μ λν΄ μ€λͺ ν΄μ£ΌμΈμ.
μ λλ¦μ νμ
μ λ§μΉ ν¨μμ νλΌλ―Έν°μ²λΌ λ°μμ μ¬μ©νλ κΈ°λ₯μΌλ‘, <T>
μ κ°μ΄ νκΈ°ν©λλ€. μ΄λ₯Ό ν΅ν΄ ν¨μ, μΈν°νμ΄μ€, ν΄λμ€ λ±μμ λ€μν νμ
μ μ μ°νκ² λμν μ μμΌλ©°, μ½λμ μ¬μ¬μ©μ±κ³Ό νμ
μμ μ±μ λμΌ μ μμ΅λλ€. λν extends
ν€μλλ₯Ό μ¬μ©νλ©΄ νΉμ νμ
λ§ νμ©νλ μ μ½ μ‘°κ±΄λ μ€μ ν μ μμ΅λλ€. μ λλ¦μ μ νΈλ¦¬ν° νμ
κ³Ό ν¨κ» μμ£Ό μ¬μ©λλ©°, λνμ μΌλ‘ Partial<T>
, Readonly<T>
μ²λΌ κΈ°μ‘΄ νμ
μ λ³νν΄μ£Όλ κΈ°λ₯μ μ 곡ν©λλ€.
μ λμΈ νμ ( | )κ³Ό μΈν°μΉμ νμ (&)μ μ°¨μ΄λ₯Ό μ€λͺ ν΄μ£ΌμΈμ.
μ λμΈ νμ μ λ μ€ νλλΌλ λ§μ‘±νλ©΄ λλ νμ μ λλ€. μΈν°μΉμ νμ μ λ νμ μ λͺ¨λ λ§μ‘±ν΄μΌ ν©λλ€.
μ νΈλ¦¬ν° νμ μ λν΄μ μ€λͺ ν΄μ£ΌμΈμ
Partial
Β : κ°μ²΄ νμ μ λͺ¨λ μμ±μ μ νμ μΌλ‘ λ§λλ νμ μ λλ€.Pick
Β : κ°μ²΄ νμ μμ νΉμ μμ±λ§ μ ννμ¬ μλ‘μ΄ νμ μ λ§λλλ€.Omit
Β : κ°μ²΄ νμ μμ νΉμ μμλ§ μ μΈνμ¬ μλ‘μ΄ νμ μ λ§λλλ€.
νμ λ¨μΈκ³Ό νμ κ°λμ μ°¨μ΄μ μ 무μμΈκ°μ?
νμ
λ¨μΈμΒ as
λ₯Ό μ¬μ©νμ¬ νμ
μ κ°μ λ‘ μ§μ νλ κ²μ΄κ³ ,
νμ
κ°λλΒ typeof
,Β instanceof
, λλΒ μ¬μ©μ μ μ νμ
κ°λ
λ₯Ό ν΅ν΄ μ€μ νμ
μ 체ν¬νκ³ μ’νμ£Όλ λ°©μμ
λλ€.
νμ μ€ν¬λ¦½νΈμμ private, protected, public ν€μλλ μ΄λ€ μν μ νλμ?
- publicμ κ²½μ° ν΄λμ€μ λͺ¨λ μμ±μ΄λ λ©μλλ μΈλΆμμ μ κ·Όμ΄ κ°λ₯ν©λλ€.
- privateμ κ²½μ° ν΄λμ€ λ΄μμλ§ μ κ·Όν μ μλ μμ±μ΄λ λ©μλλ₯Ό μ μν©λλ€. λ°λΌμ, ν΄λμ€ μΈλΆμμ μ κ·Όν μ μκ³ , μμλ ν΄λμ€μμλ μ κ·Όν μ μμ΅λλ€.
- protectedμ κ²½μ° privateκ³Ό λΉμ·νμ§λ§, μμ ν΄λμ€μμλ μ κ·Όν μ μμ΅λλ€.
νμ μΆλ‘ (Type Inference)μ΄λ 무μμΈκ°μ?
νμ μΆλ‘ μ νμ μ€ν¬λ¦½νΈ μ»΄νμΌλ¬κ° κ°λ°μκ°Β μ½λμ λͺ μμ μΌλ‘ νμ μ£Όμμ μμ±νμ§ μμλ, μ½λλ₯Ό λΆμν΄μ ν΄λΉ λ³μλ ννμμ νμ μ μ€μ€λ‘ μμμ κ²°μ νλ κΈ°λ₯μ λ§ν©λλ€. κ°λ¨ν λ§ν΄, νμ μ€ν¬λ¦½νΈκ° 'μμμ νμ μ μ§μν΄μ£Όλ' κ±°μ£ .
μλ₯Ό λ€μ΄ let name = "Alice"
μ κ°μ΄ λ³μλ₯Ό μ μΈνλ©΄μ λ°λ‘ κ°μ ν λΉνλ©΄, nameΒ λ³μμ νμ
μΒ stringμΌλ‘Β μλμΌλ‘ μΆλ‘ ν©λλ€.
`any` νμ μ μ¬μ©μ μ΄λ»κ² νΌνκ³ κ³μ κ°μ?
첫째, κ°λ₯ν ꡬ체μ μΈ νμ μ λͺ μνλ €κ³ ν©λλ€. μμ νμ μ κ²½μ°μλ string, numberμ κ°μ΄ λͺ μλ₯Ό ν΄μ£Όκ³ κ°μ²΄μ κ²½μ°μλ λ³μΉμ μ¬μ©νμ¬ λͺ ννκ² μ μν©λλ€.
λμ§Έ, λ°μ΄ν°μ νμ μ μ νν μ μ μμ λλ unknown νμ μ μ°μ μ μΌλ‘ κ³ λ €ν©λλ€. unknownμ νμ κ°λλ₯Ό μ¬μ©ν΄μ νμ μ λ¨Όμ νμΈνκ³ μ¬μ©νλλ‘ κ°μ ν΄μ£ΌκΈ°μ μμ ν λμμ λλ€.
TypeScriptμμ undefined, nullλ₯Ό λ€λ£¨λ λ°©λ²μ λν΄ μ€λͺ ν΄μ£ΌμΈμ.
μλ°μ€ν¬λ¦½νΈμμλ μ΄ λ κ°μ΄ λ°νμ μλ¬μ μ£Όμ μμΈμ΄ λκ³€ νλλ°μ, νμ μ€ν¬λ¦½νΈλ μ΄λ° λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄Β strictNullChecksΒ λΌλ λ§€μ° μ€μν μ»΄νμΌλ¬ μ΅μ μ μ 곡ν©λλ€.Β tsconfig.jsonΒ νμΌμμ μ΄ μ΅μ μΒ trueλ‘ μ€μ νλ κ²μ΄ κ°λ ₯ν κΆμ₯λ©λλ€.
strictNullChecksλ₯Ό μΌ°μ λ, stringμ΄λ number κ°μ λ€λ₯Έ νμ μ λ³μμ nullμ΄λ undefinedλ₯Ό ν λΉν μ μκ² λ©λλ€. λ§μ½ μ΄λ€ λ³μκ° null λλ undefined κ°μ κ°μ§ μ μλ€λ©΄, λ°λμ μ λμΈ νμ μ μ¬μ©ν΄μ λͺ μμ μΌλ‘ νμν΄μΌ ν©λλ€.