TypeScript(14)

조은형·2023년 10월 21일

Generic 함수

function 함수(x: unknown[]) {
  return x[0];
}

let a = 함수([4,2])
console.log(a) 

예를들어 이런 함수가 있다고 하자.
그렇다면 반환 타입은 unknown이 된다.

function 함수(x: unknown[]) {
  return x[0];
}

let a = 함수([4,2])
console.log(a + 1) 

그래서 이런 식도 오류가 발생하는 것이다. a 변수가 어떠한 타입인지 정확하지 않기 때문에 연산을 해줄 수 없기 때문이다.

function 함수<MyType>(x: MyType[]) :MyType {
  return x[0];
}

let a = 함수<number>([4,2])
let b = 함수<string>(['kim', 'park'])

그래서 <>괄호를 열고 파라미터를 입력 할 수 있다.

그리고 할당할때 타입을 지정해주면 에러를 방지 할 수 있다.

function 함수<MyType>(x: MyType) {
  return x - 1
}

let a = 함수<number>(100)

하지만, 이 코드에는 문제가 없어보이지만 에러가 발생한다.
할당 전에는 MyType에 문자가 들어올 수도 있기 때문이다.

function 함수<MyType extends number>(x: MyType) {
  return x - 1
}

let a = 함수<number>(100) //잘됩니다

그래서 extends를 사용해서 number type이 들어온다는 것을 명시해 줘야 한다.

interface lengthCheck {
  length : number
}
function 함수<MyType extends lengthCheck>(x: MyType) {
  return x.length
}

let a = 함수<string>('hello')  //가능
let a = 함수<number>(1234) //에러남

이렇게 interface를 사용해서도 generic 함수를 사용할 수 있다.

profile
좋은 형

0개의 댓글