인프런 커뮤니티 질문&답변

동화님의 프로필 이미지
동화

작성한 질문수

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

옵셔널, 제네릭 기본

제네릭에서 질문입니다.

작성

·

279

0

function add<T extends (a: string) => number>(x: T): T { return x }; 

add((a)=>+a)

위 코드 add((a)=>+a) 에서 인자 a가 왜 string으로 인식되는지 , +a가 왜 숫자로 인식되는지 이해가 가지 않습니다.

답변 2

1

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

T extends (a: string) => number
에서 a가 string이라는 게 정해져있습니다.
그리고 문자열 '1'이 있다고 하면 +'1'은 숫자 1입니다.

0

동화님의 프로필 이미지
동화
질문자

그리고 문자열 '1'이 있다고 하면 +'1'은 숫자 1입니다.

-> 이 부분은 이해 했습니다. (아래 링크 참고)

 https://stackoverflow.com/questions/6682997/what-is-the-purpose-of-a-plus-symbol-before-a-variable

 

T extends (a: string) => number
에서 a가 string이라는 게 정해져있습니다.

-> 이 부분이 여전히 이해가 가지 않습니다.

제가 이해하기로 a는 함수 add의 매개변수인 콜백함수의 매개변수로, 타입이 string 입니다.

근데 어떻게 함수 밖에서 string으로 정해져 있는건가요? 스코프가 달라서 함수 밖에서의 a는 아무것도 아니지 않나요?

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

add의 매개변수인 콜백함수의 타입이 T인 건 이해하셨죠? T는 (a: string) => number 꼴이고요.

매개변수인 콜백함수를 타이핑한 셈이니 콜백함수의 매개변수와 리턴값도 타이핑이 된 것입니다.

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

스코프와는 전혀 상관 없는 이야기입니다.

동화님의 프로필 이미지
동화
질문자

이해했습니다! 감사합니다.

콜백함수를 제대로 이해하고 있지 못했던 것 같습니다.

동화님의 프로필 이미지
동화

작성한 질문수

질문하기