Type assertion은 as를 사용해 컴파일러에게 "믿어줘, 이 값은 X 타입이야"라고 말하는 것입니다. 런타임 변환이나 검사를 전혀 하지 않으며 컴파일러가 그 값을 다루는 방식만 바꿉니다.
ts
const el = .() ;
el. = ;
data = .(str) ;
Type assertion은 as를 사용해 컴파일러에게 "믿어줘, 이 값은 X 타입이야"라고 말하는 것입니다. 런타임 변환이나 검사를 전혀 하지 않으며 컴파일러가 그 값을 다루는 방식만 바꿉니다.
const el = .() ;
el. = ;
data = .(str) ;
Assertion은 컴파일러의 판단을 덮어씁니다 — 틀리면 아무 경고 없이 런타임 크래시가 발생합니다:
const x = "hello" as unknown as number; // 이중 단언 — 컴파일러가 불평을 멈춤
x.toFixed(2); // 💥 런타임 오류: x.toFixed is not a function
단언은 값을 그 타입으로 만들지 않습니다. 단지 검사기를 입막음할 뿐입니다. 정확성에 대한 책임을 컴파일러에게서 가져온 셈입니다.
// 1. type guard — 런타임에 실제로 검증
if (typeof input === "string") { /* input은 string임이 증명됨 */ }
// 2. 외부 데이터에는 검증 라이브러리(zod)
const user = UserSchema.parse(data); // shape가 틀리면 throw
as const는 다릅니다const point = { x: 1 } as const; // 위험한 캐스팅이 아님 — 리터럴/readonly로 narrowing
Assertion은 때때로 필요합니다(DOM API, 이미 검사한 unknown을 narrowing하기). 하지만 각각은 컴파일러가 당신을 보호할 수 없는 지점입니다.
신뢰할 수 없는 데이터에는 type guard나 스키마 검증을 선호하고, 모든 as를 반드시 확신해야 하는 작고 의도적인 "내가 더 잘 안다"로 취급하세요.