inblog logo
|
vosw1
    Script

    TypeScript) 함수

    송민경's avatar
    송민경
    Sep 12, 2024
    TypeScript) 함수

    1. 함수 형태

    • 명시적 타입 지정
    • 반환 타입을 명시하지 않아도 TS는 반환값의 타입을 유추할 수 있음
    • 하지만 명시적으로 작성하는 것이 좋음
    function add(a:number, b:number) { return a+b // number 타입을 return }
     

    2. 함수 선언

    • 화살표 함수
    • 함수 선언과 같은 동작을 하지만 this바인딩이 다름
    •  function 키워드로 선언한 함수와 다르게 this가 부모 컨텍스트의 this를 사용
    const add = (a:number, b:number) => a+b
     

    3. Function Signature

    • 함수 함수 위에 마우스를 올리면 보이는 것 : 함수를 어떻게 호출하는지, return 타입도 알려줌
    • 특정 함수만의 타입 만들기
    • 함수 타입 별칭
      • 함수 타입을 변수처럼 사용 가능
      • 이 타입을 다른 함수에 적용할 수 있음
      • // 특정 함수만의 타입 선언 type Add = (a:number, b:number) => number;
    • 객체 형태의 함수 서명
      • 함수의 서명을 정의할 수 있지만, 더 일반적으로는 함수 타입 별칭을 선호
      • type Add = { (a:number, b:number) : number }
    • 타입 추론
      • 타입을 자동으로 유추할 수 있음
      • 명시적으로 타입을 지정하면 코드의 가독성과 유지 보수성이 향상됨
      • const add:Add = (a, b) => a+b // 타입을 정의하지 않아도 TS가 유추할 수 있음
     

    4. 오버로딩

    • 패키지나 라이브러리들은 오버로딩을 많이 사용 함
    • 함수가 서로 다른 여러 개의 Function Signature를 가지고 있을 때 발생
    • 여러 버전의 함수를 정의할 수 있으며, 인자 타입에 따라 다른 로직을 적용할 수 있음
    type Add = { (a: number, b: number) : number (a: number, b: string) : number } const add: Add = (a, b) => { // b의 타입이 뭔지에 따라 +가 가능할 수도 아닐 수도 있음 if (typeof b=== "string") return a return a + b }
    • 타입 체크 : 함수 내부에서 타입 체크를 통해 오버로딩된 타입에 맞게 동작 처리
    type Config = { path: string, state: object } type Push = { (path:string):void (config: Config):void; } const push:Push = (config) => { if(typeof config === "string") { // 내부에서 타입 체크함 console.log(config) }else { console.log(config.path) } }
    • 여러 개의 인자를 가지고 있을 경우
    type Add = { (a:number, b:number) : number (a:number, b:number, c:number): number, } type Add = (a, b, c?:number) => { // 인자가 3개 if(c) return a + b + c return a + b } add(1, 2) add(1, 2, 3)
     

    5. 다형성

    • 다양한 타입의 배열을 처리할 수 있도록 구현
    • 같은 이름이지만 인자가 다른 경우
    type MinPrint = { (arr: number[]):void (arr: boolean[]):void (arr: string[]):void } const minPrint: MinPrint = (arr) => { arr.forEach(i => console.log(i)) } minPrint([1, 2, 3, 4]) minPrint([true, false, true, ture]) minPrint(["a", "b", "c"])
     

    6. 제네릭

    • 인자의 타입을 정확히 모를 때 사용
    • 함수가 처리할 배열의 타입을 동적으로 지정 가능
      • 타입을 섞어서 사용할 때 각 타입을 알려줘야 함
        • type MinPrint = { (arr: number|boolean[]):void } const minPrint: MinPrint = (arr) => { arr.forEach(i => console.log(i)) } minPrint([1, 2, true, false])
    • 제네릭 사용하기
      • type MinPrint = { <TypePlaceholder>(arr: TypePlaceholder[]):void // 제네릭 } const minPrint: MinPrint = (arr) => { arr.forEach(i => console.log(i)) } minPrint([1, 2, 3, 4]) minPrint([true, false, true, ture]) minPrint(["a", "b", "c"]) minPrint([1, 2, true, false])
        type MinPrint = { <T>(arr: T[]): T } const minPrint: MinPrint = (arr) => arr[0] const a = minPrint([1, 2, 3, 4]) const b = minPrint([true, false, true, ture]) const c = minPrint(["a", "b", "c"]) const d = minPrint([1, 2, true, false])
    Share article

    vosw1

    RSS·Powered by Inblog