타입 단언(type assertion)은 타입스크립트의 타입 추론에 기대하지 않고 개발자가 직접 타입을 명시하여 해당 타입으로 강제하는 것을 의미합니다.
아래 코드에서는 person 객체에 Profile 인터페이스를 타입 단언하여 name과 age 속성을 정의하는 코드입니다.
person은 빈 객체로 초기화 했기 때문에 name과 age 속성이 없어 person.name, person.age와 같이 속성에 접근하려고 하면 타입 에러가 발생합니다.
이것을 타입 단언을 통하여 해결할 수 있습니다. 변수 뒤에 as를 붙이면 타입단언을 할 수 있으며, person 객체 타입을 Profile 인터페이스로 타입 단언하여 name과 age 속성을 정의할 수 있도록 하였습니다.
interface Profile {
name: string;
age: number;
}
const person = {};
// 타입 단언을 통해 person를 Profile 인터페이스로 타입 단언합니다.
(person as Profile).name = "jon";
(person as Prfile).age = 20;
타입 단언은 as 키워드를 붙여 사용합니다.
타입 단언은 숫자, 문자열, 객체 등 원시 값 뿐만 아니라 변수나 함수의 호출 결과에도 사용할 수 있습니다.
아래 코드에서 getNumber의 반환 타입은 any이지만 num 변수는 타입단언에 의해 number이 됩니다.
fuction getNumber(num) {
return num;
}
let num = getNumber("100") as number;
타입 단언은 아래 코드와 같이 충첩하여 여러 번 사용이 가능합니다.
중첩된 타입 단언에서는 최종 선언된 타입이 해당 코드의 타입으로 정해집니다.