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 함수를 사용할 수 있다.