inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[리뉴얼] 타입스크립트 올인원 : Part1. 기본 문법편

void의 두 가지 사용법

forEach 콜백함수 리턴값 타입이 void인 이유?

429

욱둥이

작성한 질문수 19

0

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 함수의 특성에 기인한다고 되있는데, 이게 맞는 정보인지 잘 모르겠습니다..

typescript

답변 1

2

jusssn

안녕하세요
함수 자체의 반환 타입 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

제로초(조현영)

맞습니다. undefined -> void 하면 에러가 안 납니다. 이 부분 강의에서도 제가 설명하지 않았나요?

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