본문 바로가기
TIL

타입스크립트 any, unknown

by 은지:) 2023. 2. 26.
728x90
반응형

 

 

 

typescript

: 타입 시스템이 없는 자바스크립트(약한 타입 언어)는 런타임에서 타입이 결정된다.

때문에 런타임 오류에 있어서 (try catch 로 잡아주더라도)

예상치 못한 에러가 발생한다면 프로그램은 멈출 수 있기 때문에 이를 보안하기 위해 타입을 직접 지정해주는

타입스크립트를 사용한다

 

브라우저는 자바스크립트를 읽기 때문에 타입스크립트를 자바스크립트로 바꾸어주는 컴파일 단계가 있는데

타입스크립트는 이 컴파일 과정에서 에러를 잡아내기 때문에 런타임에서 발생하던 에러를 그 전, 개발 단계에서 잡아낼 수 있다.

 

 

 

any

: 어떤 타입도 허용하는 타입

 타입스크립트에서 가장 치명적인 any 타입

 

어떤 타입인진 모르지만 기능을 먼저 확인하고 싶을 때 빨간 줄을 없애려 가끔 any를 넣어놓고 작업하는데

까먹고 그냥 둘 경우엔 타입 관련 버그를 추적하기 매우 어려워진다.

관련 타입들을 모두 any로 추정해버려서 후에 다른 타입들을 지정하는데까지 영향을 미친다.

 

그렇다면 모두 any를 넣으면 되는 게 아닌가 하지만 어느 타입이든 다 수용하는 any를 넣으면

굳이 코드량을 늘려가면서 타입스크립트를 사용할 이유가 없다

 

 

 

 

 

👆  학습 예시

 

 

 

타입을 any 로 지정 후 콘솔을 찍어보면

 

	const num: any = 10;
	console.log(typeof num);

 

 

number로 잘 찾아가주었지만

 

해당 타입에 없는 프로퍼티를 사용할 경우

 

 

	const num2: any = 123;
	console.log(typeof num2.length);

 

num은 length라는 프로퍼티가 없음에도

에러창이 아닌 undefined를 뱉는다

 

 

 

 

 

 

 

any vs unknown

 

TypeScript 3.0에서 unknown이 도입되었다.

any 와 동일하게 모든 값을 허용하지만 할당된 값이 어떤 타입인지 모를때 함부로 프로퍼티나 연산을 할 수 없다

 

	const num2: unknown = 123;
	console.log(typeof num2.length);

 

unknown 타입에 length가 없으니 사용할 수 없다는 것!

프로퍼티 나 연산을 하는 경우엔 컴파일 단계에서 체크하기 때문에 요렇게 에러를 뱉어준다

 

 

 

 

 

 

 

 

아직 소규모의 프로젝트만 접했기 때문에 코드를 작성할시엔 어떻게든 타입을 찾아 넣었지만 규모가 있는 프젝들은 어쩔 수 없이 any를 넣어야할 때가 온다고 한다

 

이때 차선책으로 any 보단 unknown을 넣는게 낫다는 점을 알게 되었지만

그래도 되도록... 안 쓰는 걸로..!

 

 

 

 

 

 

 

참고 블로그

https://developer-talk.tistory.com/198

728x90
반응형

댓글