π
TypeScript - part 1
November 13, 2022
νμ μ€ν¬λ¦½νΈ μκ°
- νμ μ€ν¬λ¦½νΈ = μλ°μ€ν¬λ¦½νΈμ νμ syntaxκ° μΆκ°λ κ²
- μλ°μ€ν¬λ¦½νΈκ° μ€νλλ λͺ¨λ κ³³μμ μ€νκ°λ₯
- @ts-check -> @param μΌλ‘ νμ μ μ μ°¨ μ€μ κ°λ₯
- μ¬μ© μ΄μ : μλ°μ€ν¬λ¦½νΈλ λμ νμ μΈμ΄λΌ λ°νμμ λ³μμ νμ μ΄ κ²°μ λ¨, νμ μ€ν¬λ¦½νΈλ μ μ νμ μΈμ΄λΌ μ»΄νμΌ νμμ λ³μμ νμ μ΄ κ²°μ λ¨ (νμ μλ¬ λ―Έλ¦¬ λ°κ²¬κ°λ₯) + νμ μ€ν¬λ¦½νΈλ es6μ es5λ es3μΌλ‘ λ³νν΄ ν¬λ‘μ€λΈλΌμ°μ§ λ¬Έμ λ₯Ό ν΄κ²°κ°λ₯ (babelμ΄ νμμμ) + κ°λ μ±μ λμ¬μ€, μ μ§λ³΄μκ° μ€μν νλ‘μ νΈμ μ ν©ν¨ (μμ νλ‘μ νΈλ μ€λ² μμ§λμ΄λ§)
νμ μ€ν¬λ¦½νΈ κΈ°λ³Έ νμ
- string, number, boolean
- κΈ°λ³Έ νμ μλ¬Έμμ
- object
- λ³΄ν΅ interfaceλ₯Ό μ¬μ©
- key type ννλ‘ object propertyμ νμ μ§μ
- Array, Tuple, enum
- Array (e.g. number[])
- Tupleμ κΈΈμ΄μ νμ μ΄ κ³ μ λ λ°°μ΄ (e.g. [string, number, number]
- enumμ μ΄λ¦μ΄ μλ μμλ€μ΄ μ΄κ±°λμ΄ μλ μ§ν© (e.g. enum EnumType {A,B,C})
- any, void, never
- any νμ μ λΉμΆμ² (noImplicityAny: trueλ₯Ό μ¬μ©νλ κ²μ΄ μ’μ)
- void = μ΄λ€ νμ λ μ‘΄μ¬ ν μ μμ, λ³΄ν΅ ν¨μμμ 리ν΄κ°μ΄ μμλ μ¬μ©
- never = μ΄λ€ κ°λ κ°μ§ μ μλ νμ , λ³΄ν΅ ν¨μμ 리ν΄κ°μ μ¬μ© (μλ¬λ 무ν루ν = μ’ λ£κ° λ μ μλ μν©)
- null, undefined
- strictNullChecks μ΅μ μ μ¬μ©ν΄ nullκ³Ό undefined λ³μ μ°Έμ‘°μ μλ¬ λ°μνκ² νλ κ²μ΄ μ’μ
- Symbol
- λ³κ²½ λΆκ°λ₯ν μ μΌν κ°
- λ³΄ν΅ κ°μ²΄μ keyλ‘ μμ£Ό μ¬μ©λ¨
- unknown
- μ΄λ€ κ°μ΄λ λ€μ΄μ¬ μ μμΌλ κ²μ¬ν΄μ μ¬μ©νλΌλ νμ
- νμ μ νΉμ νκΈ° μ μλ μλ¬λ₯Ό λ°μμν΄ (anyμ λ€λ¦)
νμ μ€ν¬λ¦½νΈμμ ν¨μ μ μΈνκΈ°
- type aliasλ‘ tuple νμ μ interface μ¬μ©ν κ²μ²λΌ μ¬μ© κ°λ₯
- μλ νμ μΆλ‘ μΌλ‘ μΈν΄ μλμ μΌλ‘ μ λ ₯μν΄λ λλ λΆλΆμ΄ μμ (κ°μΌλ‘ νμ μ΄ μΆλ‘ λ¨)
- typeμΌλ‘ ν¨μ νμ μ μμ± κ°λ₯ (e.g. type FnType = (a: string) => number;), λ³΄ν΅ ν¨μ μ체λ₯Ό μΈμλ‘ λκΈΈλ μ¬μ©
- μ νμ 맀κ°λ³μ (job?: string), κΈ°λ³Έ 맀κ°λ³μ job=βstudentβ)
- λλ¨Έμ§ λ§€κ°λ³μ (β¦restμ νμ λ°°μ΄ ννλ‘ μμ± ν΄μΌν¨), λ°°μ΄μ λ€μν νμ μ κ°μ΄ λ€μ΄μ€λ©΄ β¦rest (number | string)[] κ³Ό κ°μ ννλ‘ μ μ΄μ£Όμ΄μΌν¨
μ λμΈ νμ κ³Ό κ΅μ°¨ νμ
- μ λμΈ νμ (|)
- κ΅μ°¨ νμ (&) (λ νμ μ ν©μ³μ μλ‘μ΄ νμ μ λ§λ€μ΄μ€, ν΄λμ€κ° μμλ°λ λλ) (type Person = {a:string} , type Student = Person & {school:string}
- κΈ°λ³Έ νμ μ ν©μΉλ κ²μ μλ¨
Type Aliases
- μ€λ³΅λκ±°λ 볡μ‘ν νμ λ€μ μ΄λ¦μ μ§μ΄μ€μ μ¬μ¬μ©νλ κ²
- type Person = {name:string, age:number}
- type aliaseμ interfaceμ μ°¨μ΄μ
- interfaceλ extends λ§κ³ κ·Έλ₯ λμΌν interfaceλ₯Ό μ μΈν΄μ νμ₯ν μ μμ (μ μΈμ νμ₯), interfaceλ κ°μ²΄μλ§ μ¬μ©κ°λ₯
리ν°λ΄ νμ
- as const
- readonlyλ§ κ°λ₯ν νμ
- λ°±μλμ κ°λ€μ μ ν΄λκ³ μ¬μ©ν λ 리ν°λ΄ νμ μΌλ‘ μ ν΄λκ³ μμ£Ό μ¬μ©ν¨
ν΄λμ€
- μλ°μ€ν¬λ¦½νΈλ‘ μμ± ν quick fixλ‘ TypeScript νμμΌλ‘ μμ κ°λ₯
- ν΄λμ€ μμ
- public, protected, private μ κ·Ό μ νμ
- publicμ΄ κΈ°λ³Έκ°
- protected = μμλ°λ νμ ν΄λμ€μμκΉμ§λ§ μ κ·Όκ°λ₯, μΈλΆμμλ μ¬μ© λΆκ°λ₯
- private = λ³ΈμΈ ν΄λμ€μμλ§ μ κ·Ό κ°λ₯
- readonly μ§μ μ
- constructor μΈλΆμμ κ° ν λΉμ΄ λΆκ°λ₯νκ² νλλ‘ν¨
- getters/setters
- privateλ‘ μ€μ ν νλ‘νΌν°μ μ κ·Όνκ±°λ κ°μ λ³κ²½ν λ μ¬μ©
- μ μ νλ‘νΌν°
- static ν€μλ μ¬μ©, μΈμ€ν΄μ€ μμ±νμ§ μκ³ ν΄λμ€μ νλ‘νΌν°λ λ©μλμ μ κ·Ό κ°λ₯
- μΆμ ν΄λμ€
- abstract class
- μ μλ§ λμ΄ μκ³ κ΅¬νλμ΄ μμ§ μμ
- μΆμ ν΄λμ€λ₯Ό μμ λ°μ ν΄λμ€ μμλ μΆμ ν΄λμ€ λ©μλλ₯Ό λ°λμ ꡬν ν΄μΌλ¨
- λ©μλ μ€λ²λΌμ΄λ©
- μμ ν΄λμ€μ μ μ λ λ©μλλ₯Ό νμ ν΄λμ€μμ λ€μ μ¬μ μ νλ κ²
μ λ€λ¦
- λ€μν νμ μμ μλνλ μ»΄ν¬λνΈλ₯Ό μμ±ν λ μ¬μ©
- inputκ³Ό outputμ νμ μ΄ κ°μμΌ λ λμ κ°μ μν©μ μ¬μ© (function foo
(arg:T):T {}), const foo: arg:T => T = (args) => {}) - μ λ€λ¦ νμ λ³μ
- ν¨μμ λ§€κ° λ³μλ‘ μ¬λ¬κ°μ μ λ€λ¦ νμ λ³μ μ¬μ© κ°λ₯
- μ λ€λ¦ ν΄λμ€
- class List
- μ λ€λ¦ μΈν°νμ΄μ€
- interface Person
- μ λ€λ¦ μ μ½μ‘°κ±΄
- T extends interface μ κ°μ΄ μ λ€λ¦ νμ μ interfaceλ‘ νμ₯ν μ μμ
λ
π