콜백함수의 매개변수는 기본적으로 옵셔널이었던 것이다..!

eeensu·2025년 1월 19일
0

Javascript

목록 보기
35/36

개요

배열의 map 등의 함수를 통해 로직을 작성하던 중, 궁금한 것이 생겼다.

[].map((item, index, array) => {
	console.log(item)
})

위의 map 함수에 들어오는 인자로는 배열의 요소, 배열의 인덱스, 배열 이렇게 3가지가 들어간다. 하지만 저 매개변수들은 한가지, 두가지, 혹은 아예 넣지 않아도 사용할 수 있다. 이점이 궁금해서 map 함수의 타입을 살피러 들어갔다. 그리고 아래와 같았다.

map<U>(callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): U[];

map 함수의 콜백함수의 인자는 ?(nullish) 인자가 추가되지 않은체 있었다. 그런데도 매개변수들을 옵셔널로 사용할 수 있었던 것이다. 내가 잘못 배웠던 것일까? 이 부분이 이해가 가지 않아서, 자세히 살펴보기로 하였다.



타입 호환성 규칙?

콜백 함수에서 매개변수를 일부만 선언했을 때 타입 오류가 발생하지 않는 이유는 타입스크립트의 함수 호환성 규칙 때문이다. 타입 호환성이란 어떤 타입을 다른 타입으로 취급해도 되는지 판단하는 것을 의미한다. 이 규칙에 대해 자세히 살펴보자.

매개변수 개수의 호한성

ts에서는 매개변수가 적은 함수가 더 많은 매개변수를 받는 함수 타입과 호환된다. 이를 "매개변수의 초과 허용"(excess parameter tolerance)이라고도 한다. 위에서 살펴본 콜백함수의 매개변수의 타입은, "매개변수 개수의 호환성" 이라는 규칙에 해당된다.



왜 타입 오류가 발생하지 않을까?

ts는 콜백함수에 더 적은 수의 매개변수를 사용하는 함수도 전달될 수 있다고 가정한다. 즉, 이는 함수가 추가적인 매개변수를 무시할 수 있음 의미한다. 하지만 반대로 매개변수가 더 많은 함수를 매개변수가 더 적은 함수 타입에 할당하려고 하면 타입 에러가 발생한다. 지맘대로여


그렇다고 옵셔널로 지정된 것은 아니다!

이러한 규칙은, 콜백함수의 매개변수의 타입들을 모두 자동적으로 옵셔널로 강제 지정한 것이 아닌, 매개변수는 적어도 괜찮다 임을 표방하는 규칙이다. 즉, 모든 매개변수가 옵셔널인 것과는 다르며 구분해야하는 사실이다.

따라서, 콜백 함수의 모든 매개변수가 자동으로 옵셔널이 된다고 볼 수는 없지만, 필요한 매개변수만을 선택적으로 사용하는 것이 허용된다. 이러한 타입 호환성의 여러가지 규칙들은 다음 포스트에서 자세히 살펴보자.

profile
안녕하세요! 26살 프론트엔드 개발자입니다! (2024/03 ~)

0개의 댓글

관련 채용 정보