타입 단언은 추론과 달리, 개발자가 직접 type을 명시해주는 작업입니다.
interface Developer {
name: string;
skill: string;
}
interface Person {
name: string;
age: number;
}
function introduce(): Developer | Person {
return { name: 'Tony', age: 22, skill: 'Iron making'}
}
var tony = introduce();
console.log(tony.skill); //error code (union 교집합 특징)
다음과 같이 인터페이스 2개를 선언하고, introduce()
함수를 정의하여 tony
변수에 할당 후, skill이라는 element에 접근하려고 할때 Union의 특징으로 인해 에러를 뱉어냅니다.
이때 이런 부분을 해결할 수 있는 첫번째 방법은 타입 단언입니다.
var tony = introduce();
if ((tony as Developer).skill) {
console.log((tony as Developer).skill)
} else if ((tony as Person).age) {
console.log((tony as Person).age);
} //타입 단언 활용하여 union type 접근
as
문법은 타입 단언을 할때 사용되는 문법입니다.
따라서 tony
는 Developer
의 인터페이스 규약을 따른다는것을 단언하게 되면 Union 특징으로 인해 접근하지 못했던 skill을 접근할 수 있습니다.
하지만 타입 단언 역시 완벽한 코드는 아닙니다. 예시 코드보다 훨씬 더 많은 타입에 대한 제한이 필요해질때, 그때마다 ‘as 인터페이스’ 구문을 선언하게 되면 코드의 길이가 길어지고 가독성이 떨어집니다.
이 부분을 리팩토링 할 수 있는 부분이 타입 가드 입니다.
타입가드는 다음 포스팅에서 이어집니다..