해결된 질문
작성
·
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로 잡으므로 문맥 손실을 막은 겁니다.
답변 감사합니다!!