Programming

[TypeScript] Generics, 노마드코더 타입스크립트 챌린지

jay-dev 2023. 6. 30. 03:57

[Generics - 타입스크립트 공식문서 참고]

 

Generic이란 선언 시점이 아니라 생성 시점에 타입을 명시하여

하나의 타입만이 아닌 다양한 타입을 사용할 수 있도록 하는 기법

 

제네릭  사용 이유

/*
type SuperPrint = {
	(arr: nuber[]):void
    (arr: boolean[]):void
    (arr: string[]):void
    (arr: (number|boolean)[]):void
}
*/
// 위 타입을 제네릭을 활용하면 코드가 간결해지고 재사용성이 높아진다
// 아래는 제네릭 사용
type SuperPrint = {
	<T>(arr:<T>[])
}

const superPrint:SuperPrint = (arr) => {
	arr.forEach(e => console.log(e))
}

superPrint([1,2,3,4])
superPrint([true,false,true])
superPrint(["a","b","c"])
superPrint([1,2,true,false])

 

노마드코더 타입스크립트 챌린지 과제 - Generics

//last(arr): 이 함수는 배열의 마지막 요소를 반환해야 합니다.
type Last={
    <T>(arr:T[]):T
}
const last:Last = (arr) => {    
    return arr[arr.length-1]
}
// prepend(arr, item): 이 함수는 배열의 시작 부분에 item을 넣고 return해야 합니다.
type Prepend={
    <T>(arr:T[],item:T):T[]
}
const prepend:Prepend = (arr,item) => {    
    return [item, ...arr]
}
// mix(arr,arr) : 두개의 배열을 매개변수로 받아, 매개변수로 받은 두 배열을 하나의 배열로 섞어서 하나의 배열로 반환합니다.
type Mix = {
    <T>(arr:T[], arr2:T[]):T[]
}
const mix: Mix = (arr, arr2) => {
    let arrSum = [...arr, ...arr2]
    return arrSum;
}
// count(arr) : 배열을 매개변수로 받아, 매개변수로 받아온 배열의 길이를 반환하면됩니다.
type Count = {
    <T>(arr:T[]):number
}
const count:Count = (arr) => {
    return arr.length
}

// findIndex(arr, item) : 첫번째 매개변수로 배열을, 두번째 매개변수로 받아온 item이 첫번째 매개변수 arr배열의 몇번째 index로 존재하는지 체크한후 존재한다면 몇번째 index인지 반환하고 존재하지않는다면 null을 반환합니다.
const findIndex:FindIndex = (arr, item) => {
   return arr.indexOf(item) === -1 ? null : arr.indexOf(item)
}
type FindIndex = {
    <T>(arr:T[], item:T):number|null
}
// slice(arr, startIndex, endIndex): 첫번째 매개변수로 배열 arr을 받고, 두번째 매개변수로 숫자 startIndex, 세번째 매개변수 숫자 endIndex를 받습니다. 첫번째 매개변수 arr을 두번째 매개변수로 받은 startIndex부터 세번째 매개변수로 받은 인덱스까지 자른 결과를 반환하면됩니다. 이때 세번째 매개변수는 필수 매개변수가 아닙니다.
type Slice = {
    <T>(arr:T[], startIndex:number, endIndex:number):T[]
}
const slice:Slice = (arr, startIndex, endIndex) => {
    return arr.slice(startIndex,endIndex)
}