Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- springboot 게시판 프로젝트
- 스프링부트 update
- 프로그래머스 괄호 회전하기 python
- 스프링부트 블로그
- 스프링 게시판 만들기
- 파이썬 기초
- 유니티기초
- 타입스크립트 기본문법
- 스프링게시판프로젝트
- 타입스크립트 기초
- spring jpa 사이드프로젝트
- 파이썬 괄호 회전하기
- JS기초
- 유니티Material
- spring jpa 게시판
- springboot 게시판
- 괄호 회전하기 파이썬
- 스프링부트 회원가입
- typescript 기초문법
- 스프링부트 미니프로젝트
- 타입스크립트 기초문법
- springboot 미니프로젝트
- springboot 게시판만들기
- jpa 게시판
- 스프링부트 블로그만들기
- 유니티Cube
- 유니티
- 스프링부트 게시판만들기
- python 괄호 회전하기
- springboot 사이드프로젝트
Archives
- Today
- Total
Digking's cave
TypeScript 기본 / 기초문법 ) Polymorphism / Generic 본문
728x90
다형성 Polymorphism
/ Generic
generic은 call signature 작성할 때 들어오는 type을 확실히 모를 때 사용한다.
어떤 타입이 들어올지 모르고, 다양한 경우에 대비를 해야하는 경우 concrete type은 모든 경우를 다 작성해야 한다.
예시)
type SuperPrint = {
(arr: number[]) : void
(arr: boolean[]) : void
(arr: string[]) : void
(arr: (string | number)[]) : void
}
const superPrint : SuperPrint = (arr) =>{
arr.forEach(i => console.log(i))
}
superPrint([1,2,3,4])
superPrint([true,false])
superPrint([1,2,true,false]) // 이 경우는 대비되지 않아서 error 발생
하지만 모든 경우의 수를 다 대비하기 어렵기 때문에 generic을 사용해서 대비하는 코드를 작성할 수 있다.
TypePlaceHolder 에는 원하는 이름을 작성하면 된다. (보통 T 사용)
// void
type SuperPrint = {
<TypePlaceHolder>(arr:TypePlaceHolder[]) : void
}
//return 값 있는 경우
type SuperPrint = {
<TypePlaceHolder>(arr:TypePlaceHolder[]) : TypePlaceHolder
}
const superPrint : SuperPrint = (arr) =>{
arr.forEach(i => console.log(i))
}
superPrint([1,2,3,4])
superPrint([true,false])
superPrint([1,2,true,false])
Generic을 여러개 지정할 수 있다.
type SuperPrint = {
<T,M>(a:T[].b:M) : T
}
▶ Genric은 내가 원하는대로 signature를 생성해주는 도구이다.
- Generic의 type으로 객체가 올 수도 있다.
- type끼리 재사용을 할 수 있다.
type Player<E> ={
name : string,
extraInfo : E
}
//많은 것들이 있는 큰 타입 내에서 하나가 달라질 수 있다면, Generic을 사용하면 된다.
type NicoExtra = {
favFood : string
}
type NicoPlayer = Player<NicoExtra>
const nico : NicoPlayer = {
name : "nico"
extraInto: {
favFood: "kimchi"
]
}
const lynn : player<null> = {
name : "lynn"
extraInto: null
}
Array에서도 generic이 사용된다.
number[] 는 Array<number> 와 같다.
반응형
'기초 > TypeScript' 카테고리의 다른 글
TypeScript 기본 / 기초문법 ) Overloading (0) | 2022.08.24 |
---|---|
TypeScript 기본 / 기초문법 ) Call Signature (0) | 2022.08.23 |
TypeScript 기본 / 기초문법) Tuple / Any /unknown / void / never (0) | 2022.08.19 |
TypeScript 기본 / 기초문법 ) 함수 선언 / 인자 있는 함수 선언 / 리턴값 함수 (0) | 2022.08.19 |
TypeScript 기본 / 기초문법 ) 기본 변수 선언 / 변수 타입 지정 / 변수 ReadOnly 설정 (0) | 2022.08.19 |