## TL;DR
VS Code and CI are not checking the same thing. Either VS Code is using a different TypeScript version than the repo, or it is using a different tsconfig. Run CI's exact command locally, switch VS Code to the workspace TypeScript version, and the two will agree.

## The error
```text
tsc --noEmit fails the PR but vscode shows no errors: how to fix
```

## Steps

### 1. Run CI's exact command locally
Copy the type-check command from the workflow and run it from the repo root, including the same project flag:
```bash
npx tsc --noEmit -p tsconfig.app.json
```
Use whatever tsconfig path the workflow uses.
Expected output: the same errors CI reported, reproduced on your machine.

### 2. Compare TypeScript versions
```bash
npx tsc --version
```
Then check the version shown in the VS Code status bar. They must match.
Expected output: you can see the two versions side by side.

### 3. Switch VS Code to the workspace version
Open the command palette, run "TypeScript: Select TypeScript Version", and choose "Use Workspace Version". This makes the editor use the repo's installed TypeScript instead of the bundled one.
Expected output: the editor re-checks with the repo's compiler and the errors appear.

### 4. Check which tsconfig each side uses
VS Code checks the tsconfig that includes the open file, which may differ from the one CI passes with -p. Compare include, exclude, and references across the configs.
Expected output: both sides resolve the same file set with the same options.

### 5. Clear stale build info
Delete incremental build info files and restart the TS server in VS Code (command palette, "TypeScript: Restart TS Server").
Expected output: no phantom clean state from a stale incremental build.

### 6. Re-run both
Run the CI command again and glance at the editor.
Expected output: both agree, green or red together.

## When to use
- The exact CI-red editor-green mismatch
- After a TypeScript version bump in the repo
- Monorepos with multiple tsconfigs

## When not to use
- Both tools report the same errors (fix the code)
- Build failures unrelated to type checking
- Editor showing errors CI does not (reverse mismatch, same steps apply)

## Tool compatibility
- TypeScript 5.x (tsc with noEmit)
- VS Code with the built-in TypeScript extension
- npm, pnpm, and yarn workspaces

## Variant phrasings
### vscode typescript version versus project version
The bundled TS in VS Code lags or leads the repo's. The workspace version setting fixes it.

### tsc errors not showing in vscode
The editor is checking with different settings. Steps 3 and 4 align them.

### tsconfig.app.json versus tsconfig.json mismatch
CI often passes an explicit project. The editor picks configs per file. Align them.

## Why it happens
The editor and CI are two separate TypeScript invocations. Different compiler versions accept different syntax and flag different issues, and different tsconfigs include different files with different strictness. Any divergence produces the phantom mismatch.

## Edge cases
- Project references: CI may build referenced projects first. The editor resolves them on the fly, which can differ.
- skipLibCheck differences: a mismatch here hides or reveals errors in declaration files.
- The workspace version setting is per workspace. Contributors must each set it, or document it in the repo's VS Code settings.
- Yarn PnP and pnpm layouts can confuse the editor's module resolution while CI works. Check the editor's resolved paths.

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_5D3r44zOWBcTLHYMqHZl-w
