TypeScript compile-checking in projects where npx and node_modules/.bin symlinks fail, with a filtering technique to isolate errors from only newly-created or t
复制下面这句话,粘贴给 Claude Code、Codex、Cursor 等 AI 编程工具,它会读取安装说明并在你确认后完成安装。
请阅读 https://ai.atlankj.com/install/asset/gh-typescript-compile-check-resilient-cc9aa23f28a5 ,按照其中的说明把「typescript-compile-check-resilient」安装到你(当前 AI 工具)中。执行前先告诉我将运行的命令和写入的位置,等我确认。
查看 AI 将读取的安装说明正在读取 GitHub 原文…
内容来自 GitHub 原始文件,由原作者维护。在 GitHub 查看
Use this workflow when you need to validate TypeScript changes in a project but the standard npx tsc or node_modules/.bin/tsc invocations fail due to broken symlinks, missing PATH entries, or environment issues.
npx tsc fails with "command not found" or permission errorsnode_modules/.bin/tsc symlink is broken or unresolvableBypass npx and symlinks entirely by calling the TypeScript binary directly:
node_modules/typescript/bin/tsc --noEmit 2>&1; echo EXIT:$?
Why this works: The tsc CLI entry point is a plain Node.js script at node_modules/typescript/bin/tsc. It does not depend on symlinks or PATH resolution. The --noEmit flag checks types without writing output files. Capturing EXIT:$? lets you programmatically detect success (EXIT:0) vs failure (EXIT:1 or higher).
If the project uses a custom tsconfig, specify it explicitly:
node_modules/typescript/bin/tsc --noEmit --project tsconfig.json 2>&1; echo EXIT:$?
When a legacy codebase has pre-existing errors, the full tsc output will be noisy and may cause false negatives. Pipe through grep to isolate errors from only the files you created or modified:
node_modules/typescript/bin/tsc --noEmit 2>&1 \
| grep -E "(file-pattern)" ; echo EXIT:${PIPESTATUS[0]}
Single new file:
node_modules/typescript/bin/tsc --noEmit 2>&1 \
| grep -E "settings-store\.ts"
Multiple new files (pipe-delimited pattern):
node_modules/typescript/bin/tsc --noEmit 2>&1 \
| grep -E "(settings-keys|settings-store|preferences|SettingsModal)"
All files in a specific directory:
node_modules/typescript/bin/tsc --noEmit 2>&1 \
| grep -E "src/features/my-feature/"
Check: no output = no errors in your files (success).
When grepping, the shell exit code reflects grep, not tsc. Use ${PIPESTATUS[0]} (bash) to recover the original tsc exit code:
node_modules/typescript/bin/tsc --noEmit 2>&1 \
| grep -E "(my-file-pattern)"; echo "TSC_EXIT:${PIPESTATUS[0]}"
Or store errors explicitly:
TSC_OUTPUT=$(node_modules/typescript/bin/tsc --noEmit 2>&1)
TSC_EXIT=$?
echo "$TSC_OUTPUT" | grep -E "(settings-keys|settings-store|preferences|SettingsModal)"
echo "TSC_EXIT:$TSC_EXIT"
The second approach (storing output in a variable) is the most reliable since $? is captured before the pipe.
| Condition | Meaning |
|---|---|
TSC_EXIT:0, no grep output | ✅ Full project clean, your files are fine |
TSC_EXIT:1, no grep output | ✅ Your files are fine; pre-existing errors elsewhere (acceptable) |
TSC_EXIT:1, grep output present | ❌ Your files have errors — fix them |
TSC_EXIT:2 | ❌ tsc configuration error (bad tsconfig, missing typescript package) |
If node_modules/typescript/bin/tsc does not exist:
# Check if typescript is installed
ls node_modules/typescript/bin/tsc 2>/dev/null || echo "TypeScript not installed"
# Install if needed
npm install --save-dev typescript
# or
yarn add --dev typescript
# Store full tsc output and exit code
TSC_OUTPUT=$(node_modules/typescript/bin/tsc --noEmit 2>&1)
TSC_EXIT=$?
# Show only errors in newly-created files
NEW_FILE_ERRORS=$(echo "$TSC_OUTPUT" | grep -E "(settings-keys|settings-store|preferences|SettingsModal)")
if [ -z "$NEW_FILE_ERRORS" ]; then
echo "✅ No TypeScript errors in new files (TSC_EXIT:$TSC_EXIT)"
else
echo "❌ TypeScript errors in new files:"
echo "$NEW_FILE_ERRORS"
exit 1
fi
node_modules/typescript/bin/tsc path works on macOS, Linux, and Windows (via node node_modules/typescript/bin/tsc on Windows CMD).node node_modules/typescript/bin/tsc --noEmit--noEmit for validation-only checks to avoid side effects.