TypeScript

jΒ·2022λ…„ 5μ›” 24일
0

TIL

λͺ©λ‘ 보기
11/14
post-thumbnail

is strongly typed programming language that builds on JavaScript!

Type

κΈ°λ³Έμžλ£Œν˜•

: μ‹€μ œ 값을 μ €μž₯

  • string, boolean, number, null, undefined, symbol

μ°Έμ‘° μžλ£Œν˜•

: λ©”λͺ¨λ¦¬μ— 값을 μ£Όμ†Œλ‘œ μ €μž₯ν•˜μ˜€λ‹€κ°€ 좜λ ₯μ‹œμ— ν•΄λ‹Ή μ£Όμ†Œμ™€ μΌμΉ˜ν•˜λŠ” κ°’ 좜λ ₯

  • array, function, object

μΆ”κ°€ 제곡 μžλ£Œν˜•

: 개발자 편의λ₯Ό μœ„ν•œ 자료 νƒ€μž…

  • any, enum, never, tuple, unknown, void

unknown

: λ³€μˆ˜μ˜ νƒ€μž…μ„ 미리 μ•Œμ§€ λͺ»ν•  λ•Œ μ‚¬μš©

const a:unknown

if(typeof a === "string") {
  
}

μ΄λŸ°μ‹μœΌλ‘œ μ–΄λ–€ νƒ€μž…μ΄λƒμ—λ”°λΌ 쑰건 μ²˜λ¦¬ν•˜κΈ°λ„ 함

void

: 아무것도 λ¦¬ν„΄ν•˜μ§€ μ•ŠλŠ” ν•¨μˆ˜λ‘œ λ³΄ν†΅μ˜ 경우 λ”°λ‘œ voidλ₯Ό 지정해쀄 ν•„μš”λŠ” μ—†λ‹€

never

: 많이 μ‚¬μš©ν•˜μ§€λŠ” μ•Šμ§€λ§Œ ν•¨μˆ˜κ°€ μ ˆλŒ€ returnν•˜μ§€ μ•Šμ„ λ•Œ λ°œμƒ

Function

Call Signature

: ν•¨μˆ˜μœ„μ— 마우슀 μ˜¬λ Έμ„λ•Œ λ³΄μ΄λŠ”κ±°

Overloading

: ν•¨μˆ˜κ°€ μ—¬λŸ¬κ°œμ˜ call signatureλ₯Ό κ°–κ³  μžˆμ„ λ•Œ λ°œμƒ

Polymorphism

:λ‹€ν˜•μ„±! λ‹€λ₯Έ λͺ¨μ–‘μ˜ μ½”λ“œ, λ‹€ν˜•μ„±μ„ 이룰수 μžˆλŠ” 방법 = μ œλ„€λ¦­ μ‚¬μš©(μ œλ„€λ¦­μ€ placeholder νƒ€μž… μ‚¬μš© κ°€λŠ₯)

Generic

= νƒ€μž…μ˜ placeholder
call signature μž‘μ„±ν•  λ•Œ, ν™•μ‹€ν•œ νƒ€μž…μ„ λͺ¨λ₯Όλ•Œ generic μ‚¬μš©
μ½”λ“œλ₯Ό μž‘μ„±ν•  λ•Œκ°€ μ•„λ‹ˆλΌ μˆ˜ν–‰ν•  λ•Œ νƒ€μž… λͺ…μ‹œ

why do I use generic?

  • μž¬μ‚¬μš©μ„±μ΄ 높은 ν•¨μˆ˜μ™€ 클래슀 생성
    - ν•œλ²ˆ μ„ μ–Έν•΄μ„œ λ‹€μ–‘ν•œ νƒ€μž…μ— μž¬μ‚¬μš© κ°€λŠ₯ + 가독성 ⬆️
  • μ—λŸ¬ 작기 편리
    - any μ™€λŠ” λ‹€λ₯΄κ²Œ νƒ€μž…μ„ μ²΄ν¬ν•΄μ„œ μ»΄νŒŒμΌλŸ¬κ°€ 였λ₯˜ μ°ΎκΈ° κ°€λŠ₯

How to use generic?

: tell TS that you want to use generic

type exFunc = {
  <T>(arr: T[]):void
}

TλΌλŠ” μ΄λ¦„λŒ€μ‹  μ•„λ¬΄κ±°λ‚˜ κ°€λŠ₯. 그런데 보톡 T, V 이런거 μ‚¬μš©

Interface

: νƒ€μž…κ³Ό λΉ„μŠ·ν•˜μ§€λ§Œ 차이점 쑴재!
νƒ€μž…μ€ μ›ν•˜λŠ” λͺ¨λ“ κ²Œ 될수 있음(string, number 이런거 말고 νŠΉμ • 값도 지정 κ°€λŠ₯)
μΈν„°νŽ˜μ΄μŠ€λŠ” 였브젝트 λͺ¨μ–‘ μ •ν•΄μ£ΌκΈ°λ§Œ κ°€λŠ₯(=type과의 곡톡점, λ¦¬μ•‘νŠΈμ—μ„œ 자주 λ΄„)
type > interface 이며 클래슀λ₯Ό λ‹€λ£¨λŠ” λŠλ‚Œ

Interface is a keyword only use when you want to specify explain to TS the shape of an object.

interface Dog {
  name: string;
}

interface Animal extends Dog {
}

μœ„μ˜ interface ν‘œν˜„μ„ type으둜 ν• μˆ˜ 있음 λŒ€μ‹  상속 ν‘œν˜„ν•˜λŠ”λΆ€λΆ„μ΄ 차이있음

type Dog = {
  name: string;
}

type Animal = Dog & {
}

Abstract Class, Interface 비ꡐ

  • μΆ”μƒν΄λž˜μŠ€λŠ” js둜 μ»΄νŒŒμΌν•˜λ©΄ 일반적인 클래슀둜 μΆ”κ°€λ˜λ©΄μ„œ μƒμ„±λ˜κΈ° λ•Œλ¬Έμ— 파일 크기가 컀짐

    abstract class Person {
      constructor (
        protected firstName: string,
        protected lastName: string
      ){}
      abstract fullName(): string
    } 
    //μΆ”μƒν΄λž˜μŠ€λŠ” 이걸 μƒμ†λ°›λŠ” λ‹€λ₯Έ ν΄λž˜μŠ€κ°€ κ°€μ§ˆ ν”„λ‘œνΌν‹°μ™€ λ©”μ†Œλ“œλ₯Ό μ§€μ •ν•˜λ„λ‘ ν•΄μ€€λ‹€.
    
    class Student extends Person {
      fullName(){
        return `${this.firstName} ${this.lastName}`
      }
    }
  • μΈν„°νŽ˜μ΄μŠ€λŠ” μ»΄νŒŒμΌν•˜λ©΄ js둜 λ°”λ€Œμ§€ μ•Šκ³  사라지기 λ•Œλ¬Έμ— 더 가벼움

    interface Person {
      firstName: string,
      lastName: string,
      fullName(): string
    }
    
    class Student implements Person {
      constructor(public firstName: string, public lastName: string) {}
      fullName() {
        return `${this.firstName} ${this.lastName}`;
      }
    }

Constructor

: λͺ¨λ“  ν΄λž˜μŠ€λŠ” ConstructorλΌλŠ” λ©”μ†Œλ“œλ₯Ό κ°€μ§€λŠ”λ° μ΄λŠ” ν΄λž˜μŠ€λ‘œλΆ€ν„° 객체λ₯Ό 생성할 λ•Œ 호좜되며 객체의 μ΄ˆκΈ°ν™” λ‹΄λ‹Ή

profile
개발 곡뢀 기둝

0개의 λŒ“κΈ€