TypeScript Full-Stack: End-to-End Type Safety