forEach 콜백함수 리턴값 타입이 void인 이유?
429
작성한 질문수 19
declare function forEach(arr: number[], callback: (el: number) => undefined): void;
let target: number[] = [];
forEach([1, 2, 3], el => { target.push(el) }); // 에러 void 형식은 undefined 형식에 할당할 수 없다.
forEach([1, 2, 3], el => target.push(el)); // 에러 number 형식은 undefined 형식에 할당할 수 없다첫번째 forEach의 콜백함수 리턴값 타입이 왜 void인걸까요? return undefined가 생략되어 있으니, undefine라고 추론하지 않고 타입스크립트가 void라고 추론한 이유가 궁금합니다.. 챗 지피티에 물어보니 forEach 함수의 특성에 기인한다고 되있는데, 이게 맞는 정보인지 잘 모르겠습니다..
답변 1
2
안녕하세요
함수 자체의 반환 타입 void는 "값을 반환 할수 없는 의미"의 undefined 와 같은 의미이고용,
콜백안에 void 의미는 "값을 반환할 수 있다"로 알고있고 그러기에 undefiend( 반환값이 없다) 의미는 아닌걸로 알고 있습니다
이둘의 차이가 있습니다
그래서 콜백안에 리턴타입 값을 undefined -> void 로 바꿔주면 에러 안납니다,,
추가로 forEach 자체의 리턴값을 undefined로 해줘도 에러 안납니다, 왜냐면 실제 forEach 함수는 반환값이 없고 여기서의 void의미도 undefined 이기 때문입니다
declare function forEach(arr: number[], callback: (el: number) => void): undefined;
let target: number[] = [];
forEach([1, 2, 3], el => { target.push(el) });
forEach([1, 2, 3], el => target.push(el));
0
타입스크립트가 콜백함수의 리턴값이 없으니 void라고 추론하는거군요? return undefined가 생략되서 왜 undefined라고 추론안하지? 라고 생각했어요.. 답변 감사합니다.
데코레이터가 현재도 자주 쓰이는 문법인가요?
0
80
2
유틸리티 타입 실제로 구현은 못해도 하나씩 외우면 실무할 때 지장 없겠죠?
0
65
1
매핑 타입은 type에서밖에 안된다고 하네요?
0
65
2
자바에서의 오버로딩과 같은 개념이라고 생각해도 되나요?
0
69
2
filter 함수 반환 타입 네로잉 질문
0
74
2
map<U>(callbackfn: ....) 할때 U는 왜 여기 있는거에요??
0
47
2
ts 컴파일을 위한 type 라벨링 부분
0
46
1
concat 함수 타입 구현 중 질문 있습니다!
0
100
2
filter 메소드 질문
0
53
1
forEach 제네릭 관련 문의
0
60
1
타입 추론 시 가장 넓은 범위로 추론이 되는 건가요?
0
164
1
enum이 javascript로 트랜스파일링될때 사라진다하셨는데요
0
207
1
함수 파라미터 타입 정의 시 ...args: any[]와 ...args: any 의 차이
0
223
1
Flat type에서 ReadonlyArray 타입을 사용하는 이유?
0
157
1
bind type 질문
1
149
1
Lowercase type 관련 질문
0
152
1
key-value 타입 자동추론 질문드립니다
0
266
1
타입스크립트 교과서, p131
0
265
1
타입스크립트 교과서 p122 forEach 메서드 질문
0
231
1
타입스크립트 교과서 p116 , 코드에러남
1
269
1
타입스크립트 교과서 p112 , 코드가 안읽힙니다..
0
265
1
타입스크립트 교과서 p83
1
184
1
타입스크립트교과서 p39 쪽 코드가 이해가 안되요
1
227
1
class 에서 ts의 private vs js의 private field( # )
0
338
1





