다형성(Polymorphism)
- Poly + morphism
- (many, much) + (structure)
- 다양한 형태, 구조, 모양
- 하나가 여러가지의 형태를 가질 수 있음을 의미
기본 Alias 방식
type Basic = {
a: number
}
함수 타입을 별칭으로 정의한 방식
type Basic = {
(a: number[]):void
}
// 함수 타입을 바로 사용하는 경우
const myFunc: (a: number[]) => void = (a) => {
console.log(a)
}
Basic은 타입 별칭(a: number[]):void은 함수 타입을 정의하는 방식a: number[]은 number 타입의 배열을 인자로 받고void는 리턴 형식인데, 지금 코드에서는 리턴값이 없음type Basic = {
(a: number[]):void
(a: boolean[]):void
(a: string[]):void
(a: (number|boolean)[]):void
}
하나의 타입 별칭에 다양한 구조가 있음을 의미한다.
위 타입 별칭을 기준으로 함수에 적용하면
const print:Basic = (arr) => {
forEach((i) => console.log(i))
}
print([1,2,3]) // [1,2,3]
print([true, false, false]) // [true, false, false]
print(["a","b","c"]) // ["a","b","c"]
print([1,2,true,false,"a"]) // error : Basic 타입 별칭에 포함된 구조가 없음
위처럼 하나의 타입에 여러가지 형태의 구조를 가질 수 있는 것을 다형성이라고 한다.
하지만, 위처럼 쓴다면 가독성이나 코드 품질이 떨어진다.
이같은 문제를 해결할 수 있는 방법으로 Typescript에서는 Generic을 사용한다.
call signature
함수의 형태를 정의하는 타입type Greet = { (name: string):string // call signature }