타입 단언이란?
타입스크립트 핸드북에서는 타입 단언에 대해 대략 이렇게 이야기하고 있다. :
- 가끔은 타입스크립트보다 코드 작성자 자신이 어떤 값에 대해 더 정확하게 파악하고 있는 상황이 생길 수 있다.
- 예를 들어 document.getElementById를 사용할 경우, 타입스크립트는 이게 어떤 HTMLElement를 반환할 거라는 것 정도만 알 수 있다. 개발자가 지정한 특정 아이디를 가진 요소는 늘 HTMLCanvasElement일 수 있는데 타입스크립트는 이것까지는 알 수 없다. 따라서 이런 상황에서는 타입을 좀 더 구체적으로 잡고 가기 위해 다음과 같이 타입 단언을 사용할 수 있다.
const myCanvas = document.getElementById("main_canvas") as HTMLCanvasElement;
- 예를 들어 document.getElementById를 사용할 경우, 타입스크립트는 이게 어떤 HTMLElement를 반환할 거라는 것 정도만 알 수 있다. 개발자가 지정한 특정 아이디를 가진 요소는 늘 HTMLCanvasElement일 수 있는데 타입스크립트는 이것까지는 알 수 없다. 따라서 이런 상황에서는 타입을 좀 더 구체적으로 잡고 가기 위해 다음과 같이 타입 단언을 사용할 수 있다.
- 타입 단언은 이런 상황에서 컴파일러에게 "나 스스로 무슨 일을 하고 있는 건지 알고 있으니까 날 믿어~"라고 말을 하는 것이다.
- 아무때나 사용할 수 있는 건 아니고, 조금 더 구체적으로 또는 조금 덜 구체적으로 타입을 정의하려고 할 때만 사용할 수 있으며, 문자열을 number 타입으로 단언한다든지 하는 것은 불가능하다.
- 컴파일러에 의해 제거되므로 코드의 런타임 동작에는 영향을 미치지 않는다.
문법
value as Type
→ value를 Type 타입으로 정의
타입 단언 사용 시 주의할 점
1. 결과가 조금 더 모호한 쪽에 타입 단언을 사용할 것
2. 코드 결과에 조금 더 가까운 타입을 단언할 것
cf.) Type annotation(타입 선언)
참고: https://www.tutorialsteacher.com/typescript/type-annotation
const value: Type = 어쩌구저쩌구;
→ value가 Type 타입임을 명시하기 위해 사용
→ 타입 단언과 달리 컴파일러가 타입 체크를 수행하기 때문에 안전한 코드를 작성할 수 있음.
→ 즉 타입 선언을 사용하면 안전하며 가독성 측면에서도 좋다.
→ 타입 단언과 마찬가지로 컴파일러에 의해 제거되므로 코드의 런타임 동작에는 영향을 미치지 않는다.
'학습 내용 > TypeScript' 카테고리의 다른 글
제네릭 컴포넌트(generic component) (0) | 2022.04.03 |
---|