NestJS에서 API의 body 값을 받아올 때 해당 부분이 object 타입인 경우나 정해진 타입이 아닌 다른 타입이 사용되는 등 type에 대한 오묘한 경우들이 빈번하게 발생했습니다.
api부분에서 type 제대로 반영되지 않는 이유는
@Body() 데코레이터에 대한 TypeScript에서의 타입 정의가 그 자체로는 런타임 동작에 직접적인 영향을 미치지는 않기 때문입니다. NestJS에서는 TypeScript의 타입 시스템을 이용하여 개발자에게 코드의 가독성과 안정성을 제공하기 위해 사용됩니다.
TypeScript에서 함수의 매개변수 타입이나 반환 타입을 명시했을 때에도, 런타임 시에는 JavaScript로 변환되어 실행됩니다. TypeScript는 컴파일 시에 타입 검사를 수행하고, 코드를 JavaScript로 변환할 때 타입 정보는 삭제됩니다.
따라서 TypeScript 코드에서는 매개변수 타입이나 반환 타입이 어떻게 지정되었든, 런타임에서는 해당 타입 정보가 없습니다. 이러한 특성으로 인해 TypeScript 코드에서는 컴파일 시에 발견된 타입 오류를 방지할 수 있지만, 런타임에서는 어떤 값이라도 해당 위치에 전달할 수 있습니다.