TypeScript

[TypeScript] 함수 연습 문제 function, call signatures, generic

winter17 2023. 8. 3. 18:38

2023.08.03 - [TypeScript] - [TypeScript] Functions

 

 

Q. last(arr): 이 함수는 배열의 마지막 요소를 반환해야 합니다.

function last<T>(arr: T[]): T{ // 함수는 제네릭 타입이다
    return arr[arr.length - 1]
}

 

Q. prepend(arr, item): 이 함수는 배열의 시작 부분에 item을 넣고 return 해야 합니다.

function prepend<T>(arr: T[], item: T): T[]{ // 함수는 제네릭 타입이고 배열이다
    arr.unshift(item)
    return arr
}

 

Q. mix(arr,arr) : 두 개의 배열을 매개변수로 받아, 매개변수로 받은 두 배열을 하나의 배열로 섞어서 하나의 배열로 반환합니다.

function mix<T>(arr1: T[], arr2: T[]): T[]{ // 함수는 제네릭 타입이고 배열이다
    const array = arr1.concat(arr2)
    return array
}

 

Q. count(arr) : 배열을 매개변수로 받아, 매개변수로 받아온 배열의 길이를 반환하면 됩니다.

function count<T>(arr: T[]): number{ // 길이를 반환하니까 함수의 타입은 number
    return arr.length
}

 

Q. findIndex(arr, item) : 첫 번째 매개변수로 배열을, 두 번째 매개변수로 받아온 item이 첫 번째 매개변수 arr배열의 몇 번째 index로 존재하는지 체크한후 존재한다면 몇번째 index인지 반환하고 존재하지 않는다면 null을 반환합니다.

function findIndex<T>(arr: T[], item: T): number | null{
    // number | null은 타입스크립트의 유니온 타입이다. 반환 값으로 숫자 또는 null을 반환할 수도 있다는 의미이다.
    const index = arr.indexOf(item)
    return index !== -1 ? index : null
}

 

Q. slice(arr, startIndex, endIndex): 첫 번째 매개변수로 배열 arr을 받고, 두 번째 매개변수로 숫자 startIndex, 세 번째 매개변수 숫자 endIndex를 받습니다. 첫 번째 매개변수 arr을 두 번째 매개변수로 받은 startIndex부터 세 번째 매개변수로 받은 인덱스까지 자른 결과를 반환하면됩니다. 이때 세번째 매개변수는 필수 매개변수가 아닙니다.

function slice<T>(arr: T[], startIndex: number, endIndex?: number): T[]{
    if (endIndex !== undefined){
        return arr.slice(startIndex, endIndex+ 1)
    }else{
        return arr.slice(startIndex)
    }
}

 


 

⊙ 제네릭 타입

  • 제네릭 타입은 함수의 반환 타입이 매개변수에 따라 유동적이거나 명확하게 결정되지 않았을 때 사용한다.
  • 제네릭 타입을 사용하면 함수를 호출할 때 전달되는 매개변수에 따라 타입이 자동으로 추론되어 유연하고 재사용 가능한 함수를 작성할 수 있다
  • 함수 이름 옆에 <T>와 같이 제네릭 타입 매개변수를 선언하는 것은 해당 함수가 제네릭 타입을 사용한다는 것을 알리는 방법이다.
  • 예를 들어, 배열의 마지막 요소를 반환하라는 요구가 있을 경우 배열의 마지막 요소의 타입이 어떤 것인지 모를 때, 제네릭 타입 T를 사용하면 어떤 타입의 배열이든지 해당 타입의 마지막 요소를 반환할 수 있다

 

⊙ 타입 명시

  • 함수의 반환 타입이 명확하게 결정되어 있다면 해당 타입을 명시적으로 지정하는 것이 좋다
  • 이렇게 하면 코드의 가독성을 높이고 타입 에러를 줄일 수 있다