μ΄λ² μ£Ό κΈμμΌκΉμ§ CSSλ‘ μνλ μΉνμ΄μ§ ν΄λ‘ μ½λ©νλ κ³Όμ λ₯Ό μ μΆν΄μΌ ν΄μ λͺ©~κΈ λμμ νμ
μ€ν¬λ¦½νΈ κ°μλ₯Ό μ μ λ―Έλ€λμλ€.
CSS κ³Όμ λ₯Ό μ΄λ ΅κ² λ§λ¬΄λ¦¬νκ³ μ£Όλ§μ ν΅ν΄μ νμ
μ€ν¬λ¦½νΈ κ°μλ₯Ό λ€μ λ£κ³ μλ‘ μκ² λ λ΄μ©μ μ 리νλ €κ³ νλ€.
λ§μΉ¨ λκΈ°νκ³Ό μ°λ¦¬νμ μμ£Όλ, μμ§λκ³Ό ν¨κ» νμ
μ€ν¬λ¦½νΈ μ€ν°λλ λ€μ μ£Ό μμμΌλΆν° μ§νν μμ μ΄λ 본격μ μΌλ‘ νμ
μ€ν¬λ¦½νΈ 곡λΆμ λμλ €κ³ νλ€.
μ€μΉ λͺ
λ Ήμ΄
npm init -y
: package.json
λ§λ€κΈ°
npm i -D typescript
: νμ
μ€ν¬λ¦½νΈ μμ‘΄μ± μ€μΉ
μ격ν λ¬Έλ²μ μ μ©νκΈ° μν΄μλ tsconfig.json
νμΌμ λ€μκ³Ό κ°μ΄ μ€μ μ μΆκ°νλ€.
"strict": true
: use strict
μ λμΌ
"include": ["src/**/*.ts"]
: src ν΄λ λ΄ λͺ¨λ νμ κ²½λ‘μ .ts νμΌλ€μ μ μ©νκ² λ€λ λ²μ μ€μ μ΄λ€.
TS νμΌμ JSνμΌλ‘ λ³ννκΈ° μν μ€μ μΆκ°
package.json
μ λ€μκ³Ό κ°μ΄ νμΌ μ νκ³Ό λ³νν νμΌμ μ€μ νλ€.
JS λ¬Έλ²μ νμΈν΄μ£Όλ eslintμ μ½λ κ°λ
μ±μ ν₯μμμΌμ£Όλ prettierλ‘ νλ‘μ νΈλ₯Ό μ§νν λ λμμ΄ λ§μ΄ λκΈ° λλ¬Έμ μ¬μ©μ κΆμ₯νλ€.
λ€λ§ prettierκ° eslintμ λ¬Έλ² μ²΄ν¬μ κ°λμ© μΆ©λμ΄ μΌμ΄λλ κ²½μ°κ° μκΈ° λλ¬Έμ μ€μΉ μ μ΄μ λν μ€μ μ μΆκ°ν΄μ£Όλ κ²μ΄ μ’λ€.
λͺ
λ Ήμ΄λ λ€μκ³Ό κ°μ΄ μ
λ ₯νλ©΄ λλ€.
npm i -D eslint prettier eslint-plugin-prettier eslint-config-prettier
λν typescriptμ λν eslint parser λ° plugin μ€μ λ μΆκ°ν΄μ£Όμ!
npm i -D @typescript-eslint/parser @typescript-eslint/eslint-plugin
κΈ°λ³Έμ μΌλ‘ λ³μλͺ
: νμ
ννλ‘ μ§μ μ΄ κ°λ₯νκ³ λ°°μ΄, κ°μ²΄μμλ κ°κ°μ μΈμμ λ°νκ° μμ λκ°μ λ°©μμΌλ‘ νμ
μ μ§μ νλ©΄ λλ€.
7μ£Όμ°¨ κ³Όμ μμ μ§ννλ μ ν©μ± 체ν¬λ₯Ό νμ
μ€ν¬λ¦½νΈκ° ν΄μ£Όλ λλμ΄μλ€.
μλ‘κ² λ°°μ΄ νμ
μ Enum
νμ
μ΄μλ€.
μ΄λ νμ
μ νμ
+ κ°(λ°μ΄ν°)μ μ§ν©μΌλ‘ μλ°©ν₯ λ§€νμ΄ κ°λ₯νλ€. λ¨, μ«μλ‘ κ°μ μ§μ νμ κ²½μ°λ§ μλ°©ν₯ λ§€νμ΄ κ°λ₯νλ€. λ¬Έμλ λΆκ°λ₯νλ€.
보ν΅μ μΈλ±μ€λ₯Ό ν΅ν΄ κ°μ μ»λλ° μλ°©ν₯ λ§€νμΌλ‘ κ°μ ν΅ν΄ μΈλ±μ€λ₯Ό μ»λ κ²μ λ°λ‘ λ©μλλ₯Ό μ¬μ©νμ§ μκ³ κ΅¬ν μ μλ€.
μλμ κ°μ΄ TSμμ μμ±ν Enum
μ Jsμμ ν€κ° μΈλ±μ€, valueκ° κ°μΌλ‘ λ§€νλ κ°μ²΄λ‘ λ³νλλ€.
enum NumberList { One, Two, Three }
console.log(NumberList[0]) // 'One'
console.log(NumberList.One) // 0
const NumberList = {
0: 'One', 1: 'Two', 2: 'Three'
}
Enum
μμ μ€κ°μμ indexλ₯Ό λ°λ‘ μ€μ ν μλ μλ€.
μ£Όμν μ μ μ§μ ν index λ€μ μλ μμλ μλμΌλ‘ μ§μ μΈλ±μ€ λ€μλΆν° μ§μ μ΄ λλ€.
enum NumberList { Zero, Two = 2, Three }
console.log(NumberList[0]) // 'Zero'
console.log(NumberList.Zero) // 0
console.log(NumberList.Two) // 2
console.log(NumberList.Three) // 3
console.log(NumberList[2]) // 'Two'
κ°μ λ°ννμ§ μλ ν¨μμ λ°ν νμ
μ΄λ€.
μλ₯Ό λ€μ΄ κ°μ λ°ννμ§ μκ³ console.log
λ§ μ°λ ν¨μκ° Void νμ
μ΄λ€.
const hello: (msg: string) => void = msg => {
console.log(`Hello ${msg}`)
}
μ λ°©λ²μ μμμ μΌλ‘ voidλ₯Ό μ§μ νλ κ²μ΄κ³ λͺ μμ μΌλ‘ μ§μ νκ³ μΆμΌλ©΄ λ€μκ³Ό κ°μ΄ λ§λ€ μλ μλ€.
const hello: (msg: string) => undefined = msg => {
console.log(`Hello ${msg}`)
return undefined
}
κ³ μ λ κΈΈμ΄(length)λ₯Ό κ°μ§λ λ°°μ΄ νμ
μ΄λ€.
μΈλ±μ€λ₯Ό λ²μ΄λκ² κ°μ μ§μ νλ©΄ μλ¬κ° λ°μνλ€.
νμ λ λ°μ΄ν°λ₯Ό λ€λ£° λ μ μ©ν κ±° κ°λ€. ex. μ μ μ 보
const userA: [number, string, boolean] = [1, "Ikjun", true]
const userB: [number, string, boolean] = [2, "Ikjun2", false, 'Hi']
// '[number, string, false, string]' νμμ '[number, string, boolean]' νμμ ν λΉν μ μμ΅λλ€.
ννμμ μ£Όμν μ μ λ°°μ΄ κΈΈμ΄λ₯Ό λ³νμν¬ μ μλ push
λ splice
λ©μλλ₯Ό μ¬μ©νκ² λλ©΄ ννμ κΈΈμ΄κ° λ³νκ² λλ€.
λ°λΌμ λ°μ΄ν°κ° νν νμ
μΌ λλ λ°°μ΄ κ΄λ ¨ λ©μλλ₯Ό μ¬μ©νλλ° μμ΄μ μ£Όμν΄μΌ μλ¬κ° λ°μνμ§ μλλ€.
μ΄λ€ κ²λ ν λΉν μ μλ νμ
μΌλ‘μ¨ μλ‘μ΄ κ°μ ν λΉνλ €κ³ νλ©΄ μλ¬κ° λ°μνλ€.
Never νμ
μ μ μμ μΌλ‘ μ’
λ£λμ§ μλ ν¨μμ λ°νκ° νμ
μΌλ‘ μ§μ ν μ μλ€.
μλ₯Ό λ€μ΄ λ€μκ³Ό κ°μ μλ¬λ₯Ό throwνλ ν¨μμ μ¬μ©ν μ μλ€κ³ νλ€.
const errorFunc: (m: string) => never = (msg) => {
throw `μλ¬ λ°μ = ${msg}`
}
try {
errorFunc('Never μλ¬ λ°μ ν¨μ') // 'μλ¬ λ°μ = Never μλ¬ λ°μ ν¨μ'
} catch (e) {
console.err(e)
}
Never νμ
κ³Ό μ λ°λμ΄λ€. μ΄λ€ κ²λ ν λΉν μ μλ νμ
μ΄λ€.
μ²μ νμ
μ€ν¬λ¦½νΈλ₯Ό μ νμ λ μ¨κ° λ°μ΄ν°μ anyλ₯Ό μ¬μ©νλ κΈ°μ΅μ΄ μλ€. κ·Έλ΄κΊΌλ©΄ νμ
μ€ν¬λ¦½νΈ μ μ¬μ©νλκ³ μΉκ΅¬μκ² λλ¦Όμ λ°μμλ€...
νμ μ€ν¬λ¦½νΈλ μ격ν λ¬Έλ²μ μ μ©νλ κ²μ΄ λͺ©μ μ΄κΈ° λλ¬Έμ μ΅λν any νμ μ μ¬μ©νλ κ²μ μ§μν΄μΌ νλ€.
Any νμ
κ³Ό λΉμ·νμ§λ§ μ‘°κΈ λ€λ₯΄λ€.
μ΄λ€ κ²λ ν λΉ ν μ μμ§λ§! μ νν 무μμΈμ§ μ μ μλ νμ
μ΄λ€. λ§ κ·Έλλ‘ Unknownμ΄λ€.
νμ
μ΄ λμ§ λͺ¨λ₯΄κΈ° λλ¬Έμ λ€λ₯Έ νμ
μμλ ν λΉμ΄ λΆκ°λ₯νλ€.
Unknown νμ
μ μ΄ν νμ
κ°λλ₯Ό ν΅ν΄ νμ
μ λ°λΌ λ°μ΄ν°λ₯Ό μ§μ νλλ° μ¬μ©λλ€.
2κ° μ΄μμ νμ
μ΄ νμ©λλ νμ
μ΄λ€. |
μ μ¬μ©ν΄μ νμ
μ ꡬλΆν΄μ μ§μ νλ€.
νμ
μ΄ λ³ν μ μλ λ³μλ₯Ό μ€μ ν λ μ μ©ν μ μμ κ±° κ°λ€.
2κ° μ΄μμ νμ
μ λ³ν©λ νμ
λλ€. Unionνκ³ λ μ’ λ€λ₯΄λ€.
Unionμ ν΄λΉ νμ
μ μ¬λ¬ νμ
(|
or)μ΄ λ€μ΄κ° μ μλ κ°λ
μ΄κ³
Inersectionμ κ°κΈ° λ€λ₯Έ νμ
λμΉκ° &
(and)λ‘ μ°κ²°λ κ°λ
μ΄λ€.
κΈ°μ‘΄μ μ‘΄μ¬νλ νμ
μ μ¬μ¬μ©μ±μ λμ¬μ€λ€.
νμ μ€ν¬λ¦½νΈμμλ νμ μ κΌ λͺ μμ μΌλ‘ μ§μ νμ§ μμλ 3κ°μ§ κ·Όκ±°λ₯Ό κΈ°λ°μΌλ‘ νμ μ μΆλ‘ νλ λ‘μ§μ΄ ν¬ν¨λμ΄ μλ€.
- μ΄κΈ°νλ λ³μ
- κΈ°λ³Έκ°μ΄ μ§μ λ λ§€κ°λ³μ
- λ°νμ΄ μλ ν¨μ
μμ 3κ°μ§ κ²½μ°μλ μ΄κΈ°νλ κ°μ΄λ κΈ°λ³Έκ° λ° λ°νκ°μ ννλ₯Ό λ°νμΌλ‘ νμ μ μΆλ‘ νκΈ° λλ¬Έμ μΌμΌμ΄ νμ μ μ§μ νμ§ μμλ λλ€.
νμ§λ§ μΌμΌν νμ μ μ§μ νλ κ²μ΄ λκ° λ§μ΄ νΈν κ±° κ°λ€. λμ€μ μ΅μν΄μ§λ©΄ νμ μΆλ‘ μ νμ©ν΄μ νμ μ§μ μ μλ΅ν΄μΌκ² λ€.
μΆλ‘ μ΄ μλ€λ©΄ λ¨μΈλ μλ€. λ¨μΈμ»¨λλΌλ λ§μ²λΌ λ± μλΌμ μ΄κ±°μΌ! νλ κ°λ
μ΄λ€.
as
μ !
(Non-null λ¨μΈ μ°μ°μ)λ₯Ό ν΅ν΄ λ¨μΈν μ μλ€.
νΉν λ Έμ νλ‘μ νΈλ₯Ό μ§ννλ©΄μ 쿼리μ λ ν°λ‘ HTMLλ₯Ό μ°Ύμμ¬ λ JSλ κ·Έ μμκ° μμ λλ μ΄ν ν΄λμ€λͺ μ§μ μ΄λ μΆκ°ν λ ifλ¬ΈμΌλ‘ μΆκ°λ₯Ό ν΄μ€μΌ νλ€. μλ¬λ λμ§ μμ§λ§ μμΈ μΌμ΄μ€λ₯Ό μΆκ°ν΄μΌ νλ κ²μ΄λ€.
νμ§λ§ tsλ μλ¬λ₯Ό νμνκΈ° λλ¬Έμ μμλ₯Ό μ°Ύμμ€μ§ λͺ»νμ λ (nullμΌ λ)λ₯Ό λ°°μ νκ³ as
λ‘ HTMLElement
μμ λ¨μΈν΄μ£Όλ©΄ λ¬Έμ κ° ν΄κ²°λλ€.
μ΄ν νμ
κ°λλ₯Ό μ§μ ν΄μ€μΌ μμ ν μλ¬λ₯Ό λ°©μ§ν μ μμ§λ§ 1μ°¨μ μΌλ‘ νμ
μ§μ μμμ μλ¬λ₯Ό λ§μ μ μλ€.
!
λ‘ ν λΉ λ¨μΈμ ν΄μ£Όμ§ μμΌλ©΄ tsλ μλ¬λ₯Ό λ°μμν¨λ€.let num!:number
console.log(num)
νμ μΆλ‘ μ΄ κ°λ₯ν λ²μ μμμ νμ μ 보μ₯νλλ‘ νμ¬ λ°νμμλ¬ μλ¬κ° λ°μνμ§ μλλ‘ νλ μ½λκ° νμ κ°λμ΄λ€.
μ΄κ²μ TSμμλ§μ΄ μλλΌ JSμμλ μ ν¨ν μ½λμ΄λ€.
typeof
, instanceof
, in
λ±μ μ¬μ©ν΄μ ꡬνν μ μλ€.
κΈ°μ‘΄ JS κ³Όμ λ νλ‘μ νΈ μ§ν μμλ νμ
κ°λλ₯Ό νμ©νμλ€.
νμ
κ°λλ₯Ό ν¨μ ννλ‘ λ§λ€ λμλ ν¨μμ λ°νκ°μ νμΈνκ³ μΆμ λ°μ΄ν°μ νμ
μ λͺ
μν΄μ€μΌ νλ€.
μλ isUserA
ν¨μλ user
λ°μ΄ν°κ° UserA
νμ
μΈμ§λ₯Ό νμΈνλ ν¨μμ΄λ€.
ν¨μμ λ°νκ°μ is
ν€μλλ₯Ό ν΅ν΄ ν¨μκ° μ°ΈμΌ κ²½μ° user
λ°μ΄ν°μ νμ
μ λͺ
μν΄μ€ κ²μ΄λ€.
μνλ νμ μ 컀μ€ν νμ¬ μλ‘μ΄ νμ μ‘°ν©μ λ§λ€ μ μλ€.
type MyTypeName = string | number
type MyArray = MyTypeName[]
type UserA = {
name: string
age: number
}
type UserB = {
isValid: boolean
}
type UserX = UserA & UserB
μ€μ§μ μΌλ‘ νμ λ³μΉμ μ¬μ©ν΄μ λ΄κ° μνλ νμ μ 쑰건μ λ§μλλ‘ μ§μ ν μ μμΌλ 볡μ‘ν νμ 쑰건λ ꡬν κ°λ₯νλ©° μ¬μ¬μ©μ΄ κ°λ₯νλ€.
7μ£Όμ°¨ κ³Όμ μμ state μ ν©μ± λ° ν¨μ¨μ λ λλ§μ μν state λ³νμ λν 체ν¬λ₯Ό νλ μ½λλ₯Ό ꡬννμλλ° μ΄κ²μ΄ κ³§ typescriptμ κΈ°λ₯κ³Ό λμΌνλ€. κ³Όμ λ₯Ό μ΄μ¬ν νλ μ°κ²°λλ λΆλΆμ΄ λ§μ μ’λ€.
CSS κ³Όμ λ₯Ό μ§ννλ€λ³΄λ μμ§ flexμ gridμ νμ© λ° scss μ¬μ©μ΄ μ΅μνμ§ μμλ€. κ°μλ₯Ό λ€μλ€κ³ μλ κ²μ΄ μλλΌλ κ²μ λ€μκΈ κΉ¨λ¬μλ€.
CSSμ flex λ° gridλ₯Ό ν΅ν λ°μν λ μ΄μμκ³Ό SCSSμ mixinμ μ¬μ©ν΄μ CSS κ³Όμ λ₯Ό 리ν©ν λ§ν΄μΌκ² λ€. νμ μ€ν¬λ¦½νΈλ μ£Όλ§μ κ±Έμ³ μΈν°νμ΄μ€κΉμ§ 곡λΆλ₯Ό μλ£ν μμ μ΄λ€.
π ν΄λΉ λ΄μ©μ 곡λΆνλ©΄μ μ 리ν κΈμ λλ€. νλ¦° λΆλΆμ΄λ μ€ν΄νκ³ μλ λΆλΆμ΄ μλ€λ©΄ νΌλλ°± λΆνλ립λλ€.