inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

한 입 크기로 잘라먹는 타입스크립트(TypeScript)

함수 타입의 호환성

반환값을 기준으로 한 함수의 타입 호환성 질문입니다.

해결된 질문

180

김세현

작성한 질문수 1

0

안녕하세요.

복습중 이해되지 않는부분이 생겨서 질문드립니다.

let t1 = () => {};
let t2 = () => 'hello';

t1 = t2;

위 코드에 에러가 발생하지 않는 이유가 뭔가요?

어떻게 void타입에 string타입이 호환되는건지 궁금합니다.

typescript

답변 2

0

이정환 Winterlood

안녕하세요 이정환입니다. 예리한 질문 감사합니다 🙇‍♂

결론부터 말씀드리면 타입스크립트에서는 명시적으로 반환값 타입을 void로 정의한 경우가 아닌, 문맥적으로 반환값이 void 타입으로 추론되고 있는 경우에는 값의 반환을 금지하지 않습니다.

그러나 이렇게 반환된 값은 무시됩니다. 따라서 다음과 같이 t1을 호출한 결과를 특정 변수에 담으면 해당 변수의 타입은 void로 추론되기 때문에 해당 값을 별다른 연산에 활용하는것이 불가합니다.

image.png

이렇게 동작하는 이유와 더 자세한 원리에 대해서는 제 설명보다 더 좋은 아티클로 답변을 대신하면 좋을 것 같습니다.

https://pozafly.github.io/typescript/why-can-typescript-return-any-value-using-void/#void-%ED%83%80%EC%9E%85%EC%9D%80-%EB%8B%A4%EB%A5%B8-%ED%83%80%EC%9E%85%EC%9D%98-%EA%B0%92%EC%9D%84-return-%ED%95%A0-%EC%88%98%EB%8F%84-%EC%9E%88%EB%8B%A4

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. 김세현님.

TypeScript에서는 함수 타입의 호환성은 함수의 반환 타입이 ‘void’일 경우, 반환되는 값이 무시될 수 있기 때문에 더 유연하게 적용됩니다. 여러분의 예제 코드에서 t1의 타입은 () => void이고, t2의 타입은 () => string입니다. 하지만, TypeScript는 함수가 ‘void’ 타입을 반환한다고 해도 실제 반환 값이 있을 수 있으며, 이 반환 값은 무시될 수 있기 때문에 에러가 발생하지 않는 것입니다.

사실, t1의 타입은 () => void로 간주되고 t2의 반환 타입인 stringvoid로 치환될 수 있습니다. TypeScript는 이러한 상황에서 실제 반환되는 값이 사용되지 않음을 가정하기 때문에 두 함수 간의 할당을 허용합니다. 이는 JavaScript의 기존 코드를 원활하게 작동시키기 위한 TypeScript의 한 가지 특징입니다.

좀 더 자세히 알고 싶다면, 다음의 링크에서 관련 논의를 확인하세요:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

제네릭 클래스 핸드북 페이지가 undefined라고 나옵니다.

0

12

1

적절한 타입 찾기 React.ChangeEvent<HTMLInputElemen>

0

30

2

outDir 옵션 추가 후 컴파일 오류 질문

0

65

1

호출 시그니처 질문

0

66

2

서로소 유니언 타입이 discriminated union과 동의어 인가요?

0

75

2

조건부타입소개 중 함수오버로딩 활용 시 인수의타입과 함수의 반환값의 타입이 깨지는 문제

0

67

1

할인쿠폰 관련하여

0

160

2

프론트엔드에서의 인터페이스활용

0

94

2

안녕하세요 이정환님!

0

92

1

Node.js 설치에 관한 질문입니다.

0

79

2

함수 타입 호출 시그니처

0

58

1

35강. 모듈 보강은 라이브러리 파일을 직접 편집해야 하나요?

0

64

2

인터페이스 문법이 있는데 타입 별칭 문법은 왜 있나요?

0

118

4

마우스 호버 시 정보

0

92

2

vite으로 리액트 빌드하기를 업데이트해주세요.

1

89

2

타입가드를 만들어 사용하는 이유가 궁금합니다.

0

83

2

섹션 12가 너무 어려운데... 정상이겠죠..?

0

137

2

선생님.. 알고리즘도 강의해주시면안되나요

0

100

2

선생님은 어떻게 이런걸 아세요?

0

129

1

type: module

0

97

2

7:17초 업캐스팅 질문이있습니다!

0

76

1

슈퍼타입질문

1

64

2

프로젝트 설치

0

104

2

enum은 비원시 타입이면서 열거형 타입이 되는건가요?

0

70

2