Front-end/타입스크립트로 블록체인 만들기

[TS] HW - Polymorphism, Generic Type

탱 'ㅅ' 2023. 12. 21. 14:29

Question

 

 

Second Answer

// 배열의 마지막 요소 반환
type lastItem = <T>(arr: T[]) => T
const last: lastItem = (arr) => arr[arr.length-1]
console.log('last item', last([1, 2, 3]))

// 배열 시작부에 item 삽입 및 반환
type fullArr = <T>(arr: T[], item: T) => T[]
const prepend: fullArr = (arr, item) => [item].concat(arr)
console.log('prepend item', prepend([1, 2, 3], 0))

// 두 개의 배열을 섞어서 하나의 배열로 반환
type mixedArr = <T>(arr1: T[], arr2: T[]) => T[]
const mix: mixedArr = (arr1, arr2) => arr1.concat(arr2)
console.log('mix arrays', mix([1, 2, 3], [4, 5, 6]))

// 배열의 길이 반환
type length = <T>(arr: T[]) => number
const count: length = (arr) => arr.length
console.log('count arr', count([0, 1, 2, 3]))

// item 인덱스 반환
type index = <T>(arr: T[], item: T) => number | null
const findIndex: index = (arr, item) => {
    const result = arr.findIndex(v => v === item)
    if (result === -1) return null
    else return result
}
console.log('find index O', findIndex([1, 2, 3], 2))
console.log('find index X', findIndex([1, 2, 3], 4))

// startIndex~endIndex 자른 배열 반환
type slicedArr = <T>(arr: T[], startIndex: number, endIndex?: number) => T[]
const slice: slicedArr = (arr, startIndex, endIndex?) => {
    if (endIndex) return arr.slice(startIndex, endIndex+1)
    else return arr.slice(startIndex)
}
console.log('slice', slice([1, 2, 3, 4, 5], 2))
console.log('slice to end', slice([1, 2, 3, 4, 5], 2, 3))

 

 

Third Answer

type Last = <T>(arr: T[]) => T
const last: Last = (arr) => arr[arr.length - 1]
console.log(last([1, '1', true]))

type Prepend = <T>(arr: T[], item: T) => T[]
const prepend: Prepend = (arr, item) => {
    arr.unshift(item) 
    return arr
}
console.log(prepend([1, '1', true], false))

type Mix = <T>(arr1: T[], arr2: T[]) => T[]
const mix: Mix = (arr1, arr2) => [...arr1, ...arr2]
console.log(mix([1,'1', true], [false, 2]))

type Count = <T>(arr: T[]) => number
const count: Count = (arr) => arr.length
console.log(count([1, '1', true]))

type FindIndex = <T>(arr: T[], item: T) => number | null
const findIndex: FindIndex = (arr, item) => {
    return arr.includes(item) ? arr.indexOf(item) : null
}
console.log(findIndex([1, '1', true], '1'))
console.log(findIndex([1, '1', true], '2'))

type Slice = <T>(arr: T[], stratIndex: number, endIndex?: number) => T[]
const slice: Slice = (arr, startIndex, endIndex?) => {
    return endIndex ? arr.slice(startIndex, endIndex+1) : arr.slice(startIndex)
}
console.log(slice([1, '1', true, false], 1))
console.log(slice([1, '1', true, false], 1, 2))

'Front-end > 타입스크립트로 블록체인 만들기' 카테고리의 다른 글

[TS] Interfaces  (1) 2024.01.02
[TS] Classes  (1) 2024.01.02
[TS] Polymorphism 다형성  (0) 2023.12.20
[TS] Why not JavaScript  (0) 2023.12.18
[TS] Overloading  (0) 2023.12.15