<TS>typescript 더 심화

yezee·2022년 12월 10일
0

TS

목록 보기
2/5
post-thumbnail

JS(동적언어)-> 런타임에 타입결정/오류발견
Java,TypeScript(정적언어)->컴파일타임에 타입결정/오류발견
제네릭은 선언 시점이 아니라 생성 시점에 타입을 명시히여 하나의 타입만이 아닌 다양한 타입을 사용할 수 있도록하는 기법

-rest 파리미터, 함수에 destructuring 타입지정-

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})

-함수-

  • call Signatures
    함수위에 마우스를 올렸을 때 보게 되는 것(먼저 함수의 타입을 설명하고 코드를 구현)
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")
profile
아 그거 뭐였지?

0개의 댓글