본문 바로가기

Web/TypeScript

[TypeScript] 다형성(Polymorphism)

type SuperPrint = {
    (arr: number[]) : void
    (arr: booleanp[) : void
    (arr: string[]): void
}

const superPrint: SuperPrint = (arr) => {
    arr.forEach(i => console.log(i))
}

superPrint([1, 2, 3, 4])
superPrint([true, false, false])
superPrint(["a", "b", "c"])

> void, boolean, unknown 이런 건 concrete type

 

type SuperPrint = {
    # 타입스크립트에게 이 callsignature가 generic을 받는다는 걸 알려주는 방법
    
    <TypePlaceholder>(arr: TypePlaceholder[]) : void
    
    # 보통은 간략하게 이렇게 씀
    <T>(arr: T[]): T 
}

superPrint([1, 2, 3, 4])
superPrint([true, false, false])
superPrint(["a", "b", "c"])
superPrint([1, 2, true, false, "hello"])

> generic은 타입을 일일이 써줄 필요 없음

> generic은 내가 요청한대로 signature를 만들 수 있는 방법

 

# generic 추가
type SuperPrint = <T, M>(a: T[], b:M) => T

const a = superPrint([1, 2, 3, 4], "x")

 

type Player<E> = {
    name: string
    extraInfo: E
}

type SeojinExtra = {
    favFood:string
}

type SeojinPlayer = Player<SeojinExtra>

const seojin: SeojinPlayer = {
    name: "seojin",
    extraInfo: {
        favFood: "sweetpotato"
    }
}

const lynn: Player<null> = {
    name: "lynn",
    extraInfo: null
}

 

'Web > TypeScript' 카테고리의 다른 글

[TypeScript] Interfaces  (0) 2024.07.07
[TypeScript] 객체지향 - Classes  (0) 2024.07.05
[TypeScript] 기본 문법 - 함수  (1) 2024.07.05
[TypeScript] 기본 문법 - Type  (1) 2024.07.04
[TypeScript] 를 쓰는 이유  (0) 2024.07.04