Wat er aan de hand is
tsconfig.json staat op main op:
"strict": true,
"noImplicitAny": true
Maar er is geen script dat de typechecker draait. In package.json staan
build, dev, watch, lint, lint-fix, test, test-coverage,
stylelint, validate-oas en download-oas — geen tsc, geen vue-tsc, geen
typecheck.
De frontend-gate in CI draait npm run lint (eslint) en npm run stylelint.
Typechecken zit daar niet bij, en er is ook geen npm-script dat de gate zou
kunnen aanroepen. npm run build gaat via webpack en transpileert; dat
rapporteert geen typefouten.
Netto: de strengste instelling in het project wordt nergens afgedwongen —
niet in de IDE-gate, niet in pre-commit, niet in CI. Strictheid die niemand
afdwingt is documentatie, geen check.
Voorstel
Twee stappen, en bewust niet in één PR:
1. Het script toevoegen (veilig, verandert niets aan CI).
"typecheck": "tsc --noEmit -p tsconfig.json"
Dit is additief. Zolang typecheck niet in de frontend-checks-lijst van
.github/workflows/code-quality.yml staat, draait CI hem niet en verandert er
niets. Wel kan iedereen hem dan lokaal draaien, en kan een PostToolUse-hook of
pre-commit hem oppakken.
2. Meten, dán pas de gate.
Draai npm run typecheck één keer en kijk wat eruit komt. Ik heb dat niet
gedaan — daarvoor moet npm ci draaien, en dat doe ik niet ongevraagd in een
repo die niet de mijne is. Op een codebase waar strict nooit is afgedwongen is
een lange lijst het normale beeld.
Komt er veel uit, dan is de volgorde: eerst het aantal terugbrengen of afbakenen
(bijvoorbeeld tsc --noEmit op een submap), en pas daarna de gate aanzetten.
Een gate aanzetten die meteen rood staat helpt niemand — dat is precies hoe
|| echo-vangnetten ontstaan (zie het andere issue over gates die niet kunnen
falen).
Waar het níét hoort
tsc --noEmit kan niet zinvol per bestand: types komen uit andere
bestanden. Dit hoort dus in pre-commit of CI, niet in een per-bestand-hook. Voor
de per-bestand-laag zijn eslint, prettier en stylelint de juiste tools, en
die staan er al.
Herkomst
Gevonden bij de voorbereiding van een sessie over shift-left, op 2026-08-21.
Geverifieerd tegen main via de GitHub API op 2026-08-22 — mijn eerste meting
keek naar lokaal uitgecheckte feature-branches en overschatte het bereik; op
main is openregister de enige van de onderzochte repo's met een
tsconfig.json met strict: true.
Wat er aan de hand is
tsconfig.jsonstaat opmainop:Maar er is geen script dat de typechecker draait. In
package.jsonstaanbuild,dev,watch,lint,lint-fix,test,test-coverage,stylelint,validate-oasendownload-oas— geentsc, geenvue-tsc, geentypecheck.De frontend-gate in CI draait
npm run lint(eslint) ennpm run stylelint.Typechecken zit daar niet bij, en er is ook geen npm-script dat de gate zou
kunnen aanroepen.
npm run buildgaat via webpack en transpileert; datrapporteert geen typefouten.
Netto: de strengste instelling in het project wordt nergens afgedwongen —
niet in de IDE-gate, niet in pre-commit, niet in CI. Strictheid die niemand
afdwingt is documentatie, geen check.
Voorstel
Twee stappen, en bewust niet in één PR:
1. Het script toevoegen (veilig, verandert niets aan CI).
Dit is additief. Zolang
typecheckniet in defrontend-checks-lijst van.github/workflows/code-quality.ymlstaat, draait CI hem niet en verandert erniets. Wel kan iedereen hem dan lokaal draaien, en kan een
PostToolUse-hook ofpre-commit hem oppakken.
2. Meten, dán pas de gate.
Draai
npm run typecheckéén keer en kijk wat eruit komt. Ik heb dat nietgedaan — daarvoor moet
npm cidraaien, en dat doe ik niet ongevraagd in eenrepo die niet de mijne is. Op een codebase waar
strictnooit is afgedwongen iseen lange lijst het normale beeld.
Komt er veel uit, dan is de volgorde: eerst het aantal terugbrengen of afbakenen
(bijvoorbeeld
tsc --noEmitop een submap), en pas daarna de gate aanzetten.Een gate aanzetten die meteen rood staat helpt niemand — dat is precies hoe
|| echo-vangnetten ontstaan (zie het andere issue over gates die niet kunnenfalen).
Waar het níét hoort
tsc --noEmitkan niet zinvol per bestand: types komen uit anderebestanden. Dit hoort dus in pre-commit of CI, niet in een per-bestand-hook. Voor
de per-bestand-laag zijn
eslint,prettierenstylelintde juiste tools, endie staan er al.
Herkomst
Gevonden bij de voorbereiding van een sessie over shift-left, op 2026-08-21.
Geverifieerd tegen
mainvia de GitHub API op 2026-08-22 — mijn eerste metingkeek naar lokaal uitgecheckte feature-branches en overschatte het bereik; op
mainisopenregisterde enige van de onderzochte repo's met eentsconfig.jsonmetstrict: true.