Everything You Need for Type Testing.
TSTyche is a type testing tool for TypeScript. It ships with describe() and test() helpers, expect style assertions and a mighty test runner.
If you are used to testing, a type test should look familiar:
import { expect, test } from "tstyche";
function isSameLength<T extends { length: number }>(a: T, b: T) {
return a.length === b.length;
}
test("isSameLength", () => {
expect(isSameLength([1, 2], [1, 2, 3])).type.toBe<boolean>();
expect(isSameLength("one", "two")).type.toBe<boolean>();
expect(isSameLength).type.not.toBeCallableWith(1, 2);
});To group and organize tests, TSTyche has:
test(),it()anddescribe()helpers,- with
.only,.skipand.todorun mode flags.
The expect style assertions can check either the inferred type of an expression (as in the example above) or a type directly:
import { expect } from "tstyche";
type AsyncProps<T> = {
[K in keyof T]+?: T[K] | Promise<T[K]>;
};
type WithLoading<T> = T & { loading: boolean };
expect<WithLoading<AsyncProps<{ query: string }>>>().type.toBe<{
query?: string | Promise<string>;
loading: boolean;
}>();Here is the list of all matchers:
.toBe(),.toBeAssignableFrom(),.toBeAssignableTo()compare types or type of expressions,.toAcceptProps()checks the type of JSX component props,.toBeApplicableensures that the decorator function can be applied,.toBeCallableWith()checks whether a function is callable with the given arguments,.toBeConstructableWith()checks whether a class is constructable with the given arguments,.toHaveProperty()looks up keys on an object type.
The tstyche command is the heart of TSTyche. It allows you to select test files by path, filter tests by name and run them against specific versions of TypeScript:
tstyche query-params --only multiple --target '>=5.6'It is that simple! Actually, TSTyche does even more:
- checks messages of errors suppressed by
// @ts-expect-error, - generates type tests from a data table,
- runs tests in watch mode.
Try TSTyche online on StackBlitz:
Visit tstyche.org to view the full documentation.
MIT © TSTyche