-
TSμ λν κ³ λ―Όκ³Ό μ£Όκ΄ (feat.μν°λ μ±λ¦°μ§)π« TypeScript 2023. 2. 27. 13:44
(μ΄λ ν μ½λ©νΈλ νμμ λλ€!)
π« κ²½νμ ν΅ν 곡λΆ
λͺ λ¬ μ νμ μ€ν¬λ¦½νΈ 곡λΆνλ©° JSνλ‘μ νΈλ₯Ό TSλ‘ λ¦¬νν°λ§μ νμλ€. 리ν©ν°λ§ ν λΉμ μΈνκ³Ό μμνμ κ°μ ν μ μλ€! λ μ μ κ²½ννμ§λ§ λλ€μμ κΈ°μ μ΄ μ±νν κΈ°μ μ΄λΌκΈ°μ μ€μ€λ‘κ° μ€λλ λ§ν ν¨κ³Όλ μλμλ€.
(μ§κΈ λμ΄μΌλ³΄λ©΄ νμ μ λμ ν΄ μλ¬λ§ μ μ¬μ°κΈ° κΈκΈνμκ³ , μμ νμ§ μμμΌ ν λΆλΆκΉμ§ μμ νλ μλͺ»μ λ²νλ€λ κ²μ κΉ¨λ¬μλ€. νμ μ μ€κ³λ‘ ν΄μνλ κ΄μ μ΄ λΉμμλ μμκΈ° λλ¬Έμ΄λ€.)
TSμ μ κ·Έλ κ² μ΄κ΄νλμ§ μ§μ κ²½ννκ³ μΆλ€λ μκ° νμ μν°λ 1,2μ μ±λ¦°μ§μ μ°Έμ¬νκ² λμκ³ , ν¨κ» νμ μ€ν¬λ¦½νΈ μμ μ ν¨κ» 곡λΆνλ©° λ§μ ‘λλ’ λͺ¨λ¨ΌνΈλ₯Ό κ²½ννλ€. κ·Έ κ²½νκ³Ό κ·Έ κ³Όμ μμ νλ κ³ λ―Όλ€μ 곡μ νλ ν¬μ€ν μ μμ±ν΄λ³΄λ € νλ€.
π« λκ΅¬λ€ μ΄ν΄νλ μλ‘μ΄ μ κ·Ό: μ€λμ κ³Όμ μ 보λΌ!
2μ°¨ μν°λ ν리μ¨λ³΄λ© μ±λ¦°μ§μ ν¨κ» λ¬λ νμ μ€ν¬λ¦½νΈ μ± μ μ½μΌλ©° λꡬλ₯Ό μ΄ν΄νλ μλ‘μ΄ μκ°μ κ°κ² λμλ€.
TSκ°λ°μλ€μ JSκ°λ°μλ₯Ό λ€μ 3κ°μ§ νΉμ± λλ¬Έμ ‘TSλ₯Ό μ¬μ©ν΄μΌ ν©λλ€!’λΌκ³ μ€λνλ€.
- μ λ’°ν μ μλ κ²°κ³Ό(A Result you can Trust)
TS νμΌμ μ»΄νμΌνλ©΄ νμ μ΄ μ μ₯λ νμΌ (d.ts)κ³Ό JS λ¬Έλ²μΌλ‘ μ»΄νμΌλ νμΌ(JS) λ κ°κ° μμ±λλ€. λν νμ μ€λ₯κ° ν¬ν¨λ index.ts νμΌμ μ»΄νμΌνμ λ μ΄μ μμ΄ index.jsκ° μμ±λλ€. μ»΄νμΌλ JS νμΌλ§μΌλ‘λ νμ μ€ν¬λ¦½νΈλ μλ°μ€ν¬λ¦½νΈ μλ λ°©μμ μ ν λ³κ²½μν€μ§ μλλ€. μ΄λ κΈ°μ‘΄ μλ°μ€ν¬λ¦½νΈ κ°λ°μλ€μ Typescriptλ‘ μ½κ² λμ΄μ€κ² μ€λνκΈ° μν λ°©λ²μ΄λΌ 보μΈλ€. - μ€μΌμΌλ§ν΄λ μμ ν¨(Safety at Scale)
μλ° || C++μ κ°μ μ μ νμ μΈμ΄λ μΆ©λν μ μλ€κ³ νλ¨λλ©΄ μ½λ μ€ν μ체λ₯Ό κ±°λΆνλ€. νμ§λ§ JSλ μΆ©λ κ°λ₯μ±μ λ¨Όμ νμΈνμ§ μκ³ μ€νλΆν° νλ€. μ΄ λ§₯λ½μμ TSλ₯Ό μ¬μ©νλ©΄ μ½λλ₯Ό μ€ννκΈ° μ νΈμ§κΈ° μ°¨μμμ μμ κ°λ₯ν μ€λ₯λ₯Ό 미리 μλ €μ£Όμ΄ μ»΄νμΌ μ΄μ λ¨κ³μμ μ€λ₯λ₯Ό μ‘μλΌ μ μλ€. νλ λ¬ μ κΈ°μ‘΄ JS νλ‘μ νΈλ₯Ό TSλ‘ λ¦¬ν©ν°λ§ νκΈ°λ‘ λ§μλ¨Ήμμκ³ , κ·Έ κ³Όμ μμ λλ μ΄μ κ³Ό λμΌνλ€. λΆκ³Ό λͺ λ¬ μ JSλ‘ μμ±λ μ½λλ₯Ό μ μ λΆμ μμ΄ μ΄ν΄νλλ° μμλλ μκ°μ΄ κ½€λ μ¬λ ΈκΈ°μ κ³ μμ νλ€. μ€κ³λ₯Ό λ³΄κ³ μ½κ² μ½λλ₯Ό μ΄ν΄ν μ μλ€. - μλ°μ€ν¬λ¦½νΈ νΉμ κ·Έ μ΄μ (JavaScript and More)
λ΄λΆμ μΌλ‘ VSCodeλ TSλ‘ κ°λ°λ λ§νΌ, VSCodeλ TSμ κ°μ΄ μ¬μ© κ°λ₯ν νλ₯ν νΈμ§κΈ°μ΄λ€. μλμμ±, λ΄μ₯ νμ 체컀 λ±
TSλ₯Ό μ¬μ©νλ©΄μ μ¬μ©νλ κΈ°λ₯μ΄ μ μ€λμ μν΄ λ§λ€μ΄μ‘λ€λ μ΄ν΄λ₯Ό νκ³ , TSκ° κΈ°μ‘΄ JS κ°λ°μλ€μ μ€λνκΈ° μν΄ κ΅μ₯ν 곡μ λ€μΈ λꡬλΌλ μκ°μ΄ λ€μλ€.
π« μ λ§ TSμ μμ λμ ν΅μ κΆμ Trade-offμΌκΉ?
μλ°μ€ν¬λ¦½νΈλ λΉ λ₯΄κ³ μ μ°νλ€. νμ μ€ν¬λ¦½νΈλ₯Ό μ¬μ©νλ©΄μ μ΄ μ μ°μ±μ΄ ꡬ쑰μ νμ μ μ½λ§€μ΄λ κ² κ°λ€λ λλμ λ°μλ€. μ λ² λ¬κΉμ§λ§ ν΄λ TSλΌλ λꡬλ μμ λλ₯Ό λΉΌμμ λμ μ°λ¦¬μκ² ν΅μ κΆμ λκ²¨μ€ μΈμ΄λΌλ μκ°μ΄ λ€μμ§λ§, μ§κΈμ μκ°μ΄ μ‘°κΈ λ°λμλ€.
- TSλ μ΄λ ν λμμΈ ν¨ν΄μ΄λ μν€ν μ²λ₯Ό λ°λ₯΄λ, κ·Έ ꡬ쑰λ₯Ό μ²μλΆν° λ§λ€μ΄ λκ° μ μλ€.
- μ΄λ€ μ½λλ₯Ό λ³κ²½ν λ, κ·Έ λ³κ²½λ μ½λμ λ³κ²½λ μ½λλ‘ μΈν΄ λ³κ²½μ΄ λμ΄μΌ ν μ½λκ° λͺ μμ μΌλ‘ λΆλ¦¬ν΄ μ£ΌκΈ°μ μ½λ λ³κ²½μ μμ λλ₯Ό μ€λ€.
μ€νλ € μ°λ¦¬μκ² μνλ κ²°κ³Όλ₯Ό μμ μ μΌλ‘ λμΆν μ μκ² ν΄ μ£Όκ³ , μμ ν κ²°κ³Όλ₯Ό μ»μ μ μλ€λ νμ μ μ€λ€. λ°λΌμ TSλ μμ λ₯Ό μ ννλ μΈμ΄κ° μλλΌ, μ νμ ν΅ν΄ μμ λ₯Ό μ£Όλ μΈμ΄ (νΉμ λꡬ)λΌκ³ μ¬μ μ νκ³ μΆλ€!
π« κ·Έλμ νμ μ€ν¬λ¦½νΈκ° λλ°?
JS -> TS 리ν©ν°λ§ νλ‘μ νΈ λΉμμλ λ€λ€ λ§νλ “νμ μμ μ±”μ΄λΌλ ν¨κ³Όκ° ν¬κ² μλΏμ§ μμλ€.
μ΄λ² μ±λ¦°μ§λ₯Ό ν΅ν΄ νμ μ€ν¬λ¦½νΈλ₯Ό “μ€κ³” κ΄μ μμ 보며 “νμ μμ μ±”μ΄λΌλ ν¨κ³Όκ° μλΏμλ κ² κ°λ€.
μλ°μ€ν¬λ¦½νΈλ‘ μΌλ° ν¨μλ₯Ό λ§λ€ λλ₯Ό μκ°ν΄ 보면, ν¨μκ° λ°μμ€λ μΈνκ³Ό μμνμ ν¨μλ₯Ό μμ±νλ λΉμ κ°λ°μμ μ¬κ³ μ λ°λΌ μ μ°νκ² λ³κ²½ν μ μλ€. μ¦, κ°λ°μμκ² ν° μμ λλ₯Ό μ£Όλ μΈμ΄μ΄λ€.
μ΄λ νμ μ€ν¬λ¦½νΈλ‘ λμΌν ν¨μλ₯Ό λ§λλ κ³Όμ μ “μ€κ³” κ΄μ μμ λ°λΌλ³Έλ€λ©΄, κ°λ°μκ° λ°μμ¬ μΈνκ³Ό μμνμ μκΉμλ₯Ό 미리 μ€κ³ν ν → κ·Έ μ€κ³μ λ§μΆμ΄ ν¨μλ₯Ό λ§λ€κ² λλ€. μ¦, νμ μ€ν¬λ¦½νΈλ κ°λ°μμκ² μ€κ³μ λ§λ κ°λ°μ κ°μ νλ ν΅μ κΆμ λΆμ¬νλ λꡬ, κ·Έ ν΅μ κΆμΌλ‘ μμ λ₯Ό μ£Όλ λκ΅¬λ‘ ν΄μν μ μλ€κ³ μκ°νλ€.
π« Interfaceμ Type aliasμ λ³Έμ§μ μΈ κ³ λ―Ό
μ μ¬ν ν¨κ³Όλ₯Ό λ΄λ κ° λ°©μμ μΈμ μ¬μ©ν΄μΌ ν μ§λ₯Ό κ°κ°μ΄ μ μΈλλ λ°©μμ μ°¨μ΄μ λμ ν΄ κ³ λ―Όν΄ λ³΄μλ€.
νμ κ³Ό μΈν°νμ΄μ€κ° μ μΈλλ λ°©μμ μ°¨μ΄κ° μλ€. Interfaceλ κ°μ²΄λ₯Ό μ¬μ©νκ³ , Type aliasλ νμ μ λ³μμ²λΌ ν λΉνλ€.
type Name = __ interface Name {}
λ΄κ° μ μνλ κ°μ²΄λ μΈμμ 볡μ‘μ±μ κ°λ¨ν νννλ λ°©μμ΄λ€. Interfaceλ₯Ό κ°μ²΄μ κ΄μ μμ λ°λΌλ³Έλ€λ©΄, λ€μμ κ°μ²΄μ νΉμ±μ΄ νμν μμ , κ·Έλκ° λ°λ‘ Interfaceλ₯Ό μ¬μ©ν΄μΌ ν μμ μ΄λΌκ³ μκ°νλ€.
- μμμ΄ κ°λ₯ν [μμ]
- μ¬λ¬ ννλ‘ μ¬κ΅¬μ±μ΄ κ°λ₯ν [λ€νμ±]
- λ³Έμ§μ μΈ κ³΅ν΅μ νΉμ±λ§ 보μ μΊ‘μλ‘ λ§λ [μΆμν]
- 볡μ‘μ±μ λ¨μνν [μΊ‘μν] - DRY (Don’t repeat yourself! 무μλ―Έν λ°λ³΅μ κΈκΈ°μ)
λ°λ©΄μ, Type aliasλ “λͺ¨λ ” λ³μ, κ°μ²΄, ν¨μ, ν΄λμ€μ ν λΉμ΄ κ°λ₯νλ€.
ν΄λμ€ νΉμ±μ΄ νμν μμ , ꡬ쑰μ μΈ μ€κ³λλ₯Ό μμ±νλ μΈ‘λ©΄μμλ, Interfaceλ₯Ό, κ·Έ μΈ λ³μμ²λΌ μ¬μ©λμ΄μΌ νλ κ²½μ°μλ Type aliasλ₯Ό μ¬μ©νλ κ² μ’μ κ² κ°λ€. (λ¬Όλ‘ νμ μμ μ ν΄μ§ ν©μκ° μλ€λ©΄ λ°λ₯΄λ κ±Έλ‘ ^,^)
(μλμλ μν°λ ν리μ¨λ³΄λ© μ±λ¦°μ§ κ³Όμ μ§ννλ κ³Όμ λ₯Ό μ λ¦¬ν΄ λ³΄μμ΅λλ€.)
π« Day 1
TS λ±μ₯ μ , μλ°μ€ν¬λ¦½νΈ ν¨μμ λ§€κ°λ³μ, λ°νκ°, κ΅¬μ± μμλ₯Ό μ€λͺ νλ νμ€νλ λ΄μ©μ μν΄μ μ£Όμμ λ¬κΈ° μν΄ μ¬μ©νλ JSDocμ μ±ννλ€κ³ λ€μλ€.
첫 λ²μ§Έ κ³Όμ λ‘, μꡬ μ¬νμ λ§μΆμ΄ To Do 리μ€νΈλ₯Ό μ μΈλΆλ§ ꡬννλ©°, JSDocμ typedef / property / optional property νκ·Έλ₯Ό μ¬μ©ν΄ ν¨μλ₯Ό ꡬννκΈ° μ νμ μ λν ννΈλ₯Ό μ λ μ°μ΅μ νμλ€.
GitHub - Yeonny0723/wanted-pre-onboarding-challenge-fe-2
Contribute to Yeonny0723/wanted-pre-onboarding-challenge-fe-2 development by creating an account on GitHub.
github.com
- λλ μ
- 'νμ μμ μ±'μ ν¨κ³Όλ₯Ό 'μ€κ³'μ κ΄μ μμ λλ μ μμλ€.
- νμ§λ§, μ€λͺ λ§ ν λΏ, μλͺ»λ μ½λλ₯Ό λ§μ μλ μμκ³ ,
- 리ν©ν λ§ κ³Όμ μμ λ μ΄μ μ ν¨νμ§ μμ μ§ μ€λͺ μ μΆμ νκ³ λ³κ²½ν΄μ£Όμ΄μΌ νλ λΆλΆμ΄ λΉν¨μ¨ μ μ΄μλ€.
- λν 볡μ‘ν κ°μ²΄λ₯Ό μ€λͺ νκΈ° μ΄λ ΅κ³ , κ·Έ κ΄κ³λ₯Ό μ€λͺ νκΈ° μν΄μ λ 립μ μΈ λ€μμ μ£Όμμ΄ νμνλ€.
π« Day 2
JSDocμ ν¨μ μ€λͺ μμ λ°λΌ νμ μ μ€κ³νλ μ°μ΅μ νμλ€.
GitHub - Yeonny0723/wanted-pre-onboarding-challenge-fe-2
Contribute to Yeonny0723/wanted-pre-onboarding-challenge-fe-2 development by creating an account on GitHub.
github.com
- λλ μ
νμ μ μμ κ΄λ ¨λ μ£Όμ λ¬Έλ²μ μ΄ν΄λ³΄λ©΄μ νμ μ€ν¬λ¦½νΈμ νμ μ§μ μ λ€μν λ¬Έλ²μ΄ μλ€λ κ²μ μμκ³ , μ΅μν΄μ§ μ μλλ‘ μ¬λ¬ μμλ₯Ό μ΄ν΄λ³΄κ³ μ°μ΅ν΄ λ³Ό νμκ° μλ€κ³ λκΌλ€.
π« Day 3
νμ μ μ€κ³ν λλ‘ κ΅¬ννλ μ°μ΅μ νμλ€.
GitHub - Yeonny0723/wanted-pre-onboarding-challenge-fe-2
Contribute to Yeonny0723/wanted-pre-onboarding-challenge-fe-2 development by creating an account on GitHub.
github.com
- λλ μ
TSλ₯Ό ꡬ쑰μ μΈ μΈ‘λ©΄, μ§ν©λ‘ μ μΈ μΈ‘λ©΄μμ μλ‘κ² μ΄ν΄ν΄ 보λ κ΄μ μ μ»μλ€.
A. TSμ ꡬ쑰μ κ΄μ (λ νμ΄ν, ꡬ쑰μ νμ΄ν)
νμ μ€ν¬λ¦½νΈ κ°λ°μλ€μ λͺ μμ νμ΄νμ ν΅ν μ격ν νμ 체ν¬κ° μλ (μ§ν©μ μΈμ νλ) ꡬ쑰μ νμ΄νμ ν΅ν νμ 체ν¬λ₯Ό μ ννλ€. μμΌκΉ? μλ§ κΈ°μ‘΄ JS κ°λ°μλ€μ΄ λ°μλ€μ΄κΈ°μλ μ’ λ μ μ°ν νμ 체νΉμ΄ νμνκΈ° λλ¬Έμ΄λΌκ³ μκ°νμ§ μμμκΉ μΆλ€.
νμ§λ§ μ΄ νμ μ€ν¬λ¦½νΈμ νμ μ²΄νΉ μμ€ν μ΄ κ°λ°μμκ² νΈλ¦¬ν¨μ μ€ λλ μμ§λ§, κ°λ°μκ° μμνμ§ λͺ»ν κ³³ (λ°νμ)μμ λ²κ·Έλ₯Ό μΌμΌν¬ μλ μλ€.
type Human = { name: string } type Animal = { name: string } function getName(obj: Animal){ // Animalμ λ£λ Humanμ λ£λ κ΅¬μ‘°κ° λμΌνκΈ°μ λ¬Έμ μμ. return obj.name }
κ·Έλ κΈ° λλ¬Έμ μ΄ TSμ νμ μ²΄νΉ μμ€ν μ μ μ΄ν΄ν΄ μ»΄νμΌλ¬μ νμ μ²΄νΉ κ²°κ³Όλ₯Ό μμΈ‘νλ©° μ½λλ₯Ό μμ±ν΄μΌκ² λ€λ μκ°μ΄ λ€μλ€.
B. TSμ μ§ν©λ‘ μ μΈ κ΄μ
μ΄ κ΄μ μμ νμ μ νλμ μ§ν©μ΄λ€.
- λͺ¨λ νμ μ μ§ν©μΌ λΏμ΄μ§λ§ νμ κ°μλ κ³μΈ΅μ΄ μ‘΄μ¬νκ³ ,
- νμ κ°μ κ΄κ³λ νΉμ κ΄κ³λ‘ μ μΈλμλμ§ μ¬λΆκ° μλ ν¬ν¨λ μμ±μ μν΄ κ²°μ νλ€.
- μλΈ νμ (νμ νμ )μ μνΌ νμ (μμ νμ )μ ν λΉν μ μλ€.
type Human = { name: string } type Animal = { name: string } type HumanAnima = Human extends Animal ? true : false // true. Humanμ΄ λ λ²μ©μ μ΄κΈ°μ μκ° λ μμ νμ μ΄λ€.
π« Day 4.
Typescript-exercises λ¬Έμ λ₯Ό 1-9λ²κΉμ§ νλ©° μꡬμ¬νμ ꡬννκΈ° μν΄ μ΄λ€ νμ μλ¬κ° λ°μνμκ³ , μ΄λ»κ² ν΄κ²°ν μ μλμ§ κΈ°λ‘νλ κ³Όμ μλ€.
- κ³Όμ λ§ν¬ (μλ³Έ λ¬Έμ λ νμΌ μ»€λ° historyμ μμ΅λλ€)
Union νμ , νμ κ°λ, Type Predicate (νμ λͺ μ ), Partial & Omitκ³Ό κ°μ Util νμ μ μ°μ΅νκ³ μ μ©νλ€.
GitHub - Yeonny0723/wanted-pre-onboarding-challenge-fe-2
Contribute to Yeonny0723/wanted-pre-onboarding-challenge-fe-2 development by creating an account on GitHub.
github.com
(! λ¬Έμ νμ΄μ λν μ€λͺ μ μΆν ν¬μ€ν μμ λ€λ£° μμ !)
μμΌλ‘ ν μΌ:
λ Όλ¦¬μ κΈ°λ°ν μΌκ°κ²¬: https://techblog.woowahan.com/9804/
κ΄μ¬μ¬ λΆλ¦¬: https://www.youtube.com/watch?v=KEDUqA9JeIo&t=1212s
λ²μ μ λ°μ΄νΈμμ κΌ μ½μ΄μΌ ν μ¬ν: Breaking Changes (μ΄μ λ²μ κ³Ό νΈνλμ§ μλ λΆλΆ)
Discussion ⇒ Issue ⇒ PR ⇒ Code Review ⇒ Merge → SEMVer ⇒ Release νλ¦μ μ§ν€λ©° κ°λ°
κΎΈμ€ν κ°μ€μ μΈμ°κ³ → μ립νκ³ → κ²μ¦νκ³ → μ€ννλ κ³Όμ μ λ°λ³΅
RealWorld λ§λ€κΈ° μ°μ΅: https://github.com/pocojang/nuxt-realworld
λΌμ΄λΈλ¬λ¦¬ λΆμ: https://github.com/axios/axios
Type hierarchy: https://www.zhenghao.io/posts/type-hierarchy-tree
μ°Έκ³ μλ£: https://typescript-kr.github.io/pages/tutorials/ts-for-the-new-programmer.html
https://velog.io/@bbaa3218/TypeScript-λ ν-7-μ΄νν°λΈ-νμ μ€ν¬λ¦½νΈ
- μ λ’°ν μ μλ κ²°κ³Ό(A Result you can Trust)