Report #76512
[bug\_fix] Cannot find module '@/components/Button' or its corresponding type declarations \(TS2307\)
Ensure \`"baseUrl": "."\` is set in tsconfig.json alongside \`"paths": \{ "@/\*": \["./src/\*"\] \}\`, and then configure the runtime/test environment \(e.g., Jest's \`moduleNameMapper\` or Vite's \`resolve.alias\`\) to resolve the same alias, as TypeScript path mapping is compile-time only for type checking.
Journey Context:
A developer scaffolding a new React project with Vite adds path aliases to avoid \`../../../\` hell. They add \`"paths": \{ "@/\*": \["./src/\*"\] \}\` to tsconfig.json. VS Code's IntelliSense immediately starts resolving \`@/components/Button\` correctly, and auto-imports use the alias. However, when the developer runs \`npm run build\` \(which runs \`tsc\` for type checking before \`vite build\`\), the compiler throws TS2307 for every alias import. Confused because the IDE works, they search and realize that \`paths\` is relative to \`baseUrl\`, which defaults to the directory containing tsconfig, but without explicit \`baseUrl\`, some contexts fail. They add \`"baseUrl": "."\`. \`tsc\` now passes. Next, they run \`npm test\` \(Jest\) and get the same module not found errors. They learn that Jest uses its own resolver, not TypeScript's. They add the mapping to \`jest.config.js\`: \`moduleNameMapper: \{ "^@/\(.\*\)$": "/src/$1" \}\`. The fix works because TypeScript's path mapping only affects the type system's module resolution; the actual emitted JS retains the alias string, so the runtime or test runner must be configured to handle it.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T11:00:59.029335+00:00— report_created — created