Type checking
Proves call sites and data shapes agree across modules: wrong types, unhandled null or None, signatures broken by a change.
Sub-techniques
3
| ID | Name | Description |
|---|---|---|
V1006.001 | Gradual typing | Type-check annotated code first and tighten strictness per module. |
V1006.002 | Strict mode | Disallow implicit any, untyped definitions and unchecked optional access. |
V1006.003 | Compiler as checker | In compiled languages the build is the type check; a failing build is this check failing. |
Craft it
- Run the checker in non-strict mode on the whole repository to get a baseline.
- Turn on strict flags for new and frequently changed modules first.
- Run it in CI as its own job so type errors are not hidden in test failures.
Reverse engineer it
Signs that a codebase already runs this technique, and where to read how it is configured.
- [tool.mypy] or pyrightconfig.json, tsconfig.json with strict flags.
- A tsc --noEmit, mypy or pyright step in CI or a typecheck script.
Where the scanned repositories configure it:
package.jsonin 80 repositories.github/workflows/*.ymlin 74 repositoriespyproject.tomlin 17 repositoriesMakefilein 12 repositories.pre-commit-config.yamlin 9 repositoriesmypy.iniin 4 repositories
Detected by the scanner as: Type checking (wrong types, unhandled null or none, call signatures broken across modules.)
Open-source packages
3
- mypy python/mypy
- Pyright microsoft/pyright
- TypeScript (tsc) microsoft/TypeScript
Tools seen in scans
by repositories that run them
Procedure examples
repositories that run it, most-starred first; 40 of 106
| Repository | Tools | Runs in | Evidence |
|---|---|---|---|
| freeCodeCamp/freeCodeCamp | tsc |
local | api/package.json scripts.build |
| facebook/react | cargo-check |
ci | .github/workflows/compiler_rust.yml jobs.rust.steps[6] |
| nousresearch/hermes-agent | tsc |
local | tests-js/package.json scripts.typecheck |
| microsoft/vscode | tsc |
ci, local | .github/workflows/pr.yml jobs.compile.steps[9] (Type check /build/ scripts) |
| vercel/next.js | tsc |
local | package.json scripts.test-types |
| facebook/react-native | tsc |
ci, local | .github/workflows/test-all.yml jobs.lint.steps[7] (TypeScript (legacy deep im... |
| electron/electron | tsc |
local | package.json scripts.tsc |
| langflow-ai/langflow | mypy |
ci | .github/workflows/lint-py.yml jobs.lint.steps[3] (Run Mypy) |
| angular/angular | tsc |
ci, local | .github/workflows/ci.yml jobs.lint.steps[7] (Confirm code builds with typescr... |
| mui/material-ui | tsc |
local | docs/package.json scripts.typescript |
| ant-design/ant-design | tsc |
local | package.json scripts.lint |
| mermaid-js/mermaid | tsc |
local | package.json scripts.build:types:watch |
| fastapi/fastapi | mypy |
pre-commit, ci | .github/workflows/pre-commit.yml jobs.pre-commit.steps[10] |
| home-assistant/core | mypy |
ci | .github/workflows/ci.yaml jobs.mypy.steps[5] (Run mypy (fully)) |
| infiniflow/ragflow | tsc |
local | web/package.json scripts.type-check |
| earendil-works/pi | tsc |
pre-commit, ci, local | .github/workflows/build-binaries.yml jobs.publish-npm.steps[7] (Check) |
| oven-sh/bun | cargo-check, tsc |
ci, local | .github/workflows/rust-lints.yml jobs.clippy.steps[3] (cargo check --all-targ... |
| python/cpython | mypy |
ci | .github/workflows/mypy.yml jobs.mypy.steps[4] |
| microsoft/playwright | tsc |
ci, local | .github/workflows/infra.yml jobs.doc-and-lint.steps[5] |
| pallets/flask | mypy |
ci, local | .github/workflows/tests.yaml jobs.typing.steps[4] |
| unionlabs/union | tsc |
local | docs/package.json scripts.typecheck |
| vitejs/vite | tsc |
ci, local | .github/workflows/ci.yml jobs.lint.steps[5] (Typecheck) |
| nestjs/nest | tsc |
local | package.json scripts.build |
| browser-use/browser-use | pyright |
pre-commit, ci | .github/workflows/lint.yml jobs.lint-style.steps[4] |
| grafana/grafana | tsc |
pre-commit, ci, local | .github/workflows/frontend-lint.yml jobs.lint-frontend-typecheck.steps[3] |
| lobehub/lobe-chat | tsc |
local | package.json scripts.type-check:tsc |
| google-gemini/gemini-cli | tsc |
ci, local | .github/workflows/ci.yml jobs.lint.steps[13] (Run typecheck) |
| nuxt/nuxt | tsc |
local | package.json scripts.test |
| warpdotdev/warp | cargo-check |
ci | .github/workflows/ci.yml jobs.check-eval-compilation.steps[2] (Verify compila... |
| remix-run/react-router | tsc |
local | integration/package.json scripts.typecheck |
| aaif-goose/goose | cargo-check, tsc |
ci, local | .github/workflows/ci.yml jobs.rust-check-wasm.steps[3] (Check wasm32 build) |
| prettier/prettier | tsc |
ci, local | .github/workflows/lint.yml jobs.lint.steps[4] (Check JSDoc Types) |
| vuejs/core | tsc |
ci, local | .github/workflows/test.yml jobs.lint-and-test-dts.steps[5] (Run tsc) |
| tanstack/query | tsc |
ci, local | .github/workflows/autofix.yml jobs.autofix.steps[2] (Generate reference docs) |
| cypress-io/cypress | tsc |
local | cli/package.json scripts.check-ts |
| mastodon/mastodon | tsc |
ci, local | .github/workflows/lint-js.yml jobs.lint.steps[3] (Typecheck) |
| ruvnet/ruflo | cargo-check, tsc |
ci, local | .github/workflows/federation-peer-rust.yml jobs.stable-native.steps[3] (cargo... |
| discourse/discourse | tsc |
ci, local | .github/workflows/publish-types.yml jobs.publish.steps[6] (Generate type defi... |
| getsentry/sentry | mypy, tsc |
ci, local | .github/workflows/backend.yml jobs.typing.steps[4] |
| apache/airflow | tsc |
local | ts-sdk/package.json scripts.typecheck |