5/2(월) TypeScript function -2

길고 꾸준하게·2022년 5월 2일
0

TypeScript퍼먹기

목록 보기
3/6
post-thumbnail

짧다.. 취업준비 하고 방송대 과제랑 개인공부랑 운동도 하고.. 하고하고..

Generic

오늘은 제네릭을 배웠다. placeholder의 type버전 같이 느껴졌다.
앞에서는 call signature를 경우의 수별로 다적어서 이래저래 타입가드를 해서 에러를 막는걸 배웠는데. 제네릭이란놈은 강력했다.

type Foo = {
	(arr:number[]):void
    (arr:boolean[]):void
}
//
type Gen = {
	<T>(a:T[]):void
}

처음 느낀느낌은 '?' 이거다. 근데 엄청 강력한놈이다 이해한 바로는 그냥 새하얀 도화지같은거다 저 generic에 내가 원하는 타입을 명시해주면 typescript가 알아서 타입추론을해서 딱 해준다는거.

const fun:Gen = (arr) => arr.forEach(item => console.log(item))

const a = fun([1,2,'a','b'])
const b = fun(['a','b',true,false])
const c = fun<boolean>([1,2,3])
// err => generic의 타입을 boolean으로 정했는데 인자로 number[]가 들어가있으니까 => 덮어버린느낌이다

//mouse hover시 각각의 call signature가 다른걸 알수있다

generic을 쓰지않을때면 arr의 아이템이 number|boolean 이니까
call signature을 각 경우마다 다 적어줘야했지만 제네릭을쓰니 지가 알아서 타입추론을한다. 사용법은 <> 꺽쇠안에 변수마냥 원하는 name으로 '나 제네릭이요' 선언을해주고 쓰면된다. 당연히 복수의 제네릭도 가능하다
(그대신 쓰는쪽에서도 복수의 제네릭을 써야겠지?)

이것이 generic을 쓰는 일반적인 case는 아니지만 무슨 역할을 하는지는 충분히 알수있다고 생각한다.
라이브러리를 쓸때 사용법을 보면 이 제네릭이 많이 써져있다고 한다.
그리고 이게 Poly<대충 many의 의미>morphism<대충 형태의 의미> = (다형성)이란다.

type FavFood = {
	favFood:string
}
type PeoPle<T> = {
	name:string
    extraInfo:T
}
const people1:PeoPle<FavFood> = {
	name:'코딩깎는 노인'
    extraInfo:{
    	favFood:'진짜 양고기 너무먹고싶으니까 양고기'
    }
}

딱~~~보고 느껴보자 절벽에서 폭포맞으며 자연을 느끼는것처럼.

profile
작은 나의 개발 일기장

0개의 댓글