타입 단언은 타입스크립트에서 컴파일러의 타입 추론을 무시하고, 개발자가 직접 변수나 표현식의 타입을 지정할 때 사용됩니다. 이를 통해 코드의 의도를 명확히 하거나 타입스크립트가 추론하지 못하는 상황헤서 강제로 타입을 부여할 수 있습니다.
타입 단언은 as
키워드를 사용하여 표현합니다.
let someValue: unknown = "Hello, TypeScript";
let strLength: number = (someValue as string).length;
console.log(strLength); // 16
as
외에서 <>
꺽쇠 문법을 사용하여 타입 단언을 할 수 있습니다. 하지만 이 방식은 JSX와 충돌할 수 있으므로 JSX를 사용하는 경우에는 as
키워드를 사용하는 것이 권장됩니다.
let someValue: unknown = "Hello, TypeScript";
let strLength: number = (<string>someValue).length;
console.log(strLength); // 16
타입스크립트가 추론한 타입이 개발자의 의도와 다를 경우, 타입 단언으로 타입을 지정합니다.
let input = document.getElementById("username") as HTMLInputElement;
input.value = "TypeScript";
unknown
이나 any
타입은 컴파일러가 타입을 알 수 없으므로, 단언을 통해 적절한 타입으로 변환합니다.
let data: any = "Hello";
let dataLength: number = (data as string).length;
함수가 특정 타입을 반환한다는 것을 보장하지만, 컴파일러가 이를 추론하지 못할 때 사용합니다.
function getElement(): HTMLElement | null {
return document.querySelector("div");
}
let element = getElement() as HTMLDivElement;
element.style.color = "red";
타입 단언은 개발자의 의도를 강제로 컴파일러에 전달하기 때문에, 잘못 사용할 경우 런타임 에러이 발생할 수 있습니다.
let numValue = 100;
let strValue = numValue as string;
이중 단언은 타입스크립트의 강력한 타입 검사를 우회할 수 있으므로 권장되지 않습니다.
let value: any = "Hello";
let numValue = value as unknown as number;
타입 단언은 최후의 수단으로 사용하는 것이 좋으며, 가능하다면 타입 가드를 사용하는 것이 권장됩니다.
function isString(value: unknown): value is string {
return typeof value === "string";
}
let value: unknown = "Hello";
if (isString(value)) {
console.log(value.length); // 안전하게 처리
}
as
와 <>
를 사용하지만, JSX에서는 as
를 권장합니다.✅ 참고