TSCheck is a tool for finding bugs in hand-written TypeScript type definitions (
npm install -g tscheck
foo.d.ts against the library
foo.js, run the command:
tscheck foo.js foo.d.ts
tscheck -h for a list of options.
TSCheck prints a series of warnings, one warning per line, in no particular order.
The warnings have the format
foo.bar.baz: expected X but found Y. This means the value one would get by evaluating the pseudo-expression
foo.bar.baz was expected to have type
X, but tscheck found something of type
If there is no output, it means tscheck found no bugs in your
.d.ts file. This does not guarantee that the type definitions are actually correct, it just means that tscheck could not find anything wrong.
In some cases, tscheck may get confused and report "false warnings", complaining about type definitions that are actually correct. TSCheck apologizes for the inconvenience.
--missing to tscheck and it will suggest parts of the API that are not yet documented in the
.d.ts file. This is a useful way to check if you missed any parts of the API.
TSCheck cannot deduce the types for these features so it cannot write the
.d.ts file for you.
TSCheck can take several minutes to complete. If you are impatient, pass the flag
--no-analysis, this will perform a much faster check, but it will also find fewer bugs.
If you wish to check a specific part of the API, you can pass the flag
--path foo to only check paths that contain the string
foo; this will typically speed things up a lot.
If tscheck seems to get stuck, try passing
--expose-gc to the node process. This alleviates a problem with the v8 garbage collector.
Note that even for tiny
.d.ts files, tscheck still has a warm-up time of a few seconds due to parsing TypeScript's
.js file; so try to get the unminified compiled version of the library you are using. If you are testing a plug-in you should concatenate it with the base library (and use the
--path argument if possible, to only test the plug-in).
tsc on your
.d.ts file before running tscheck. tscheck assumes that your
.d.ts passes some well-formedness checks performed by the TypeScript compiler, and will react violently otherwise.
TSCheck will leave a
.jsnap file next to your
.js file. It contains a snapshot created with jsnap. Feel free to delete it; tscheck will regenerate it if necessary, although it speeds things up a bit if you leave it there.