The loose-ts-check
utility helps ignore particular types of TS error in
specified files.
This is useful when migrating to a stricter tsconfig.json
configuration
incrementally, where only some existing files are allowed to have TS errors.
- ignores specific TS errors from specific files
- detects files that no longer have to be loosely type-checked
- auto-updates the loosely type-checked list of files when a file no longer has errors
- auto-updates the ignored error codes when there are no errors of that type
- loosely type-checked files can be specified using globs
The exclude
option in tsconfig.json
only tells tsc to not start
type-checking from those files. If some already type-checked file imports a file
listed in the exclude
, it will still be type-checked.
Thus, it does not suit this use case.
The vscode team have already encountered a similar problem
and solved it in another way. They created a new tsconfig.json
that only
included some files.
While this works great with existing files, it does not automatically enforce a stricter config for new files in the project.
Install the utility with:
npm install loose-ts-check --save-dev
Pipe the result of tsc
to loose-ts-check
to run the utility:
tsc --noEmit -p tsconfig.strict.json | npx loose-ts-check
To initialize the list of ignored errors and loosely type-checked files based on the current errors, run:
tsc --noEmit -p tsconfig.strict.json | npx loose-ts-check --init
To automatically update the list of loosely type-checked files, run:
tsc --noEmit -p tsconfig.strict.json | npx loose-ts-check --auto-update
Display the list of options by running:
npx loose-ts-check --help
To avoid running tsc
again and again when testing, save the output to a file:
tsc > errors.log;
And then, use the tool by redirecting the input:
npx loose-ts-check < errors.log
To migrate the codebase to use a stricter tsconfig.json
, you will need 2
tsconfigs:
-
tsconfig.json
- the strict tsconfig. This config will be used by the IDE and by theloose-ts-check
tool.The aim is to see the errors in the IDE, to feel motivated to fix the errors while modifying existing files.
-
tsconfig.loose.json
- a tsconfig that extendstsconfig.json
, but has the stricter options turned off.This config will be used by any linter, test runner, bundler you will have.
If you are using
ts-node
, you need to passtsconfig.loose.json
as aTS_NODE_PROJECT
variable, so it uses the correct tsconfig, e.g.cross-env TS_NODE_PROJECT="tsconfig.loose.json" webpack --mode=development
To run
tsc
to do type-checking, pass-p tsconfig.loose.json
option:tsc -p tsconfig.loose.json
Then, use the following command to initialize the config files:
tsc | npx loose-ts-check --init
After that, run
tsc | npx loose-ts-check
instead of tsc
to do type-checking.
In case you want to have the errors ignored in your IDE as well, use loose-ts-check-plugin.
To verify the correctness, run:
npm run type-check
npm run lint:formatting
npm run test
Contributions are welcome!
Make sure the CI passes on your PRs, and that your code is covered by unit tests.