Home [TS] Typescript의 함수
Post
Cancel

[TS] Typescript의 함수

  1. call signatures
    • 객체 구현시 Type Alias로 코드를 줄였던 것 처럼 call signatures로 함수 의 파라미터와 리턴값에 타입을 설정한다.
    • call signatures를 활용하면 구현 코드와 타입 설정 코드를 분리할 수 있다.
    1
    2
    3
    
     type Add = ( a : number , b : number) => number;
    
     const add : Add = (a,b) => a + b
    
  2. overloading
    • 함수가 여러개의 call signatures를 가지고 있을 때 발생한다.
    • call signature들의 파라미터의 개수가 다를때 여분의 파라미터는 optional이다.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
     type Add = {
         (a :  number, b : number) :  number
         (a :  number, b : number, c: number) :  number
     }
    
     const add : Add = (a,b,c?:number) => {
         if(c) return a + b + c
         return a + b
     }
     //여분의 파라미터 c 의 타입이 number일 것이라고 작성해야함
    
    
  3. polymorphism
    • Generic은 모든 타입의 변수를 받는다.
    • call signatures에서는 직접 타입을 입력했지만 Generic을 사용하면 타입을 직접 입력할 필요가 없다. TS가 알아서 할당된 변수에 맞는 call signature를 생성해준다.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
     type SuperPrint ={
         <TypePlaceholder>( arr: TypePlaceholder[] ) : void
     }
     //모든 변수를 입력하기 위해 모든 타입을 나열할 필요가 없다. 
     //TypePlaceholder라는 Generic을 입력해 모든 타입 조합을 대신한다.
     //보통 T 를 사용한다.
    
     const superPrint : SuperPrint = (arr) => {
         arr.forEach( i => console.log(i) )
     }
    
     superPrint([1,2,3,4])
     superPrint([true, false])
     superPrint([1,2,"hello","bye"])
     superPrint([1,2,true, "hello"])
     //TS가 배열의 요소들이 어떤 타입인지 알아서 판단한다.
    
    • any가 Generic을 대신해도 에러는 나지 않지만 각 배열의 요소 타입이 모두 any가 된다.
    • Generic은 요구한대로 signature를 생성해주는 도구와 같다.
    • 파라미터가 여러개인 경우, 파라미터들을 Generic으로 설정하고 싶으면 파라미터의 개수만큼 Generic을 명시하면 된다.
    1
    2
    
     type SuperPrint = < T, M >( arr : T[], b : M ) => T
    
    
This post is licensed under CC BY 4.0 by the author.

[TS] Typescript의 타입

[리팩터링] chapter 8 기능 옮기기

Comments powered by Disqus.