JS(동적언어)-> 런타임에 타입결정/오류발견
Java,TypeScript(정적언어)->컴파일타임에 타입결정/오류발견
제네릭은 선언 시점이 아니라 생성 시점에 타입을 명시히여 하나의 타입만이 아닌 다양한 타입을 사용할 수 있도록하는 기법
rest parameter는 배열의 형태로 저장되기 때문에 타입지정 시, []를 붙여주어야한다
function 함수(...rest:number[]){
console.log(a)//[1,2,3,4,5]
}
함수(1,2,3,4,5)
함수 파라미터 작명할 때 destructuring 쓰면 object 넣기 쉬워진다
function 함수({student,age}){
console.log(student,age) //true 20
}
함수({student:true, age:20})
type Add=(a:number, b:number)=>namber;
const add:Add=(a,b)=>a+b
overloading
함수가 서로 다른 여러개의 call signatures를 가지고 있을 때 발생
polymorphism
인자들과 반환값에 대하여 타입에 따라 그에 상응하는 타입을 갖을 수 있다
any와의 차이점은 해당 타입에 대한 정보를 잃지 않는다
generics
재사용 가능한 컴포넌트를 마들기 위해 사용하는 기법으로 단일 타입이 아닌 다양한 타입에서 작동할 수 있ㄷ는 컴포넌트를 생성할 수 있다
타입스크립트는 제네릭을 처음 인식했을 때와 제네릭의 순서를 기반으로 제네릭의 타입을 알게된다
쉽게 말하자면 제네릭은 내가 요구한대로 signature를 생성해줄 수 있는 도구
type SuperPrint ={
<T>(a:T[]):T
}
const superPrint:SuperPrint=arr=>arr[0]
const a=superPrint([1,2,3,4])
const b=superPrint([true,false,true])
const c=superPrint(["a","b","c"])
const d=superPrint([1,2,true,false,"hello"])
근데 아무타입으로 만들수있게 된다면 any
와 차이가 뭐지??
type SuperPrint=(a:any[])=>any
제네릭을 사용하면 타입스크트립트가 call signature를 만들어주기 때문에 보호받을 수 있다
제네릭은 처음 사용되는 지점을 기반으로 타입이 무엇인지 알게된다
아래처럼 두번째 제네릭을 넣어주게 되면 두번째 arguments가 함수에서 제네릭으로 되어있다는 것을 알게된다
type SuperPrint ={
<T,M>(a:T[],b:M):T //T는 함수의 첫번째 파라미터로 배열이 올것이고 M은 두번째 인자다
}
const SuperPrint=(a)=>a[0]
const a=superPrint([1,2,3,4],"x")