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

Raehan Jeong님의 프로필 이미지
Raehan Jeong

작성한 질문수

[리뉴얼] 타입스크립트 올인원 : Part2. 실전 분석편

react-native-keyboard-aware-scrollview 직접 타이핑하기

안녕하세요.

해결된 질문

작성

·

308

0

안녕하세요 슬랙 클론코딩 공부 전 다른 책과 병행하여 한번 더 공부하고 있는데 책 내용중 모르는 것이 있어 질문 드립니다.

as const 를 사용하면 문맥 손실(losing context)과 관련된 문제를 깔끔하게 해결할 수 있다고 나왔는데 이게 무슨 뜻인지 잘 모르겠습니다.

코드는 첫번째 코드에서 두번째 코드로 수정되는 상황이었습니다.

function panTo(where: [number, number]) { }

const loc = [10, 20];
panTo(loc); // Error
// Argument of type 'number[]' is not assignable to parameter of type '[number, number]'. Target requires 2 element(s) but source may have fewer.

 

function panTo(where: readonly [number, number]) { }

const loc = [10, 20] as const;
panTo(loc)


타입 스크립트가 loc를 number[]로 추론하여 매개변수와 타입이 맞지 않아 아래와 같이 수정했는데 as const가 붙으면 readonly가 붙고 그게 더 좁은 타입이라 매개변수에도 readonly를 붙여준다는 것까진 이해했습니다.

 

as const를 사용하여 문맥 손실과 관련된 문제를 해결한다는 것이 무슨 뜻인지 궁금합니다!!

 

제가 생각하기에는 한변 변수에 넣어줬기 때문에 [10, 20]이란 값을 직접적으로 사용하지 못하고 그거에 대한 타입을 추론하여 함수에 값이 아닌 타입으로만 검사를 하는 것을 보고 문맥 손실이 일어났다 하는 것이라 추론했습니다.

감사합니다.

 

답변 1

0

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

[10, 20] 은 타입스크립트가 [number, number]가 아니라 string[]으로 넓게 추론합니다. 이걸 문맥 손실이라고 표현한 겁니다. as const를 붙이면 정확하게 number, number로 잡으므로 문맥 손실을 막은 겁니다.

Raehan Jeong님의 프로필 이미지
Raehan Jeong
질문자

답변 감사합니다!!

Raehan Jeong님의 프로필 이미지
Raehan Jeong

작성한 질문수

질문하기