함수 오버로드의 func() 구현 시그니쳐 작성 중 궁금한게 있습니다.
안녕하세요~ 강의 잘 보고있습니다.
영상은 [함수 오버로딩] 8:30 정도이구요.
function func(...rest: number[]) {
const [a, b, c] = rest;
if (typeof b === "number" && typeof c === "number") {
console.log(a + b + c);
} else {
console.log(a * 20);
}
}매개변수를 강사님께선 b?:number, c?:number로 없을 수도 있다라고 표시해준다 하셨는데
저는 강의를 보던 중 위 코드가 떠올라서 적용해보았는데 결과 값은 같았습니다.
매개변수가 더 늘어날 수 있다는 점에서 이점이 있어 보이는데 강사님이 알려주신게 더 나은 코드일까요?
위의 코드에 문제점이 있어 알려주시면 감사 드리겠습니다.
답변 1
1
안녕하세요 이정환입니다.
말씀하신대로 number[] 타입으로 정의하셔도 문제가 발생하지는 않습니다.
대신 아래의 예제 코드처럼 두번째, 세번째 인수의 타입이 정확하게 추론되지 않는 문제가 있습니다.
function func(a: number): void;
function func(a: number, b: number, c: number): void;
function func(...rest: number[]) {
const [one, two, three] = rest;
one.toFixed();
two.toFixed();
three.toFixed();
}원래라면 함수 내부의 변수 two와 three는 number | undefeind 타입이어야 합니다. 첫번째 오버로드 시그니쳐로 호출했을 경우에는 값이 없기 때문이죠
그러나 지금처럼 number[] 타입으로 매개변수 타입을 정의해두면, 이 배열의 모든 요소의 타입이 number 타입으로 고정되어버립니다.
결과적으로 위와 같이 안전하지 못한 연산을 하게 되어 타입 오류를 발생시킬 염려가 있습니다.
적절한 타입 찾기 React.ChangeEvent<HTMLInputElemen>
0
22
2
outDir 옵션 추가 후 컴파일 오류 질문
0
58
1
호출 시그니처 질문
0
64
2
서로소 유니언 타입이 discriminated union과 동의어 인가요?
0
74
2
조건부타입소개 중 함수오버로딩 활용 시 인수의타입과 함수의 반환값의 타입이 깨지는 문제
0
65
1
할인쿠폰 관련하여
0
154
2
프론트엔드에서의 인터페이스활용
0
92
2
안녕하세요 이정환님!
0
90
1
Node.js 설치에 관한 질문입니다.
0
79
2
함수 타입 호출 시그니처
0
56
1
35강. 모듈 보강은 라이브러리 파일을 직접 편집해야 하나요?
0
63
2
인터페이스 문법이 있는데 타입 별칭 문법은 왜 있나요?
0
115
4
마우스 호버 시 정보
0
91
2
vite으로 리액트 빌드하기를 업데이트해주세요.
1
89
2
타입가드를 만들어 사용하는 이유가 궁금합니다.
0
82
2
섹션 12가 너무 어려운데... 정상이겠죠..?
0
135
2
선생님.. 알고리즘도 강의해주시면안되나요
0
100
2
선생님은 어떻게 이런걸 아세요?
0
128
1
type: module
0
97
2
7:17초 업캐스팅 질문이있습니다!
0
75
1
슈퍼타입질문
1
62
2
프로젝트 설치
0
103
2
enum은 비원시 타입이면서 열거형 타입이 되는건가요?
0
68
2
함수는 함수타입? 객체타입??
1
94
2





