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 { type _, expect } from "tstyche";
type AsyncProps<T> = {
[K in keyof T]+?: T[K] | Promise<T[K]>;
};
type WithLoading<T extends object> = T & { loading: boolean };
expect<WithLoading<AsyncProps<{ query: string }>>>().type.toBe<{
query?: string | Promise<string>;
loading: boolean;
}>();
expect<WithLoading<_>>().type.not.toBeInstantiableWith<[string]>();Relation matchers:
.toBe()checks if a type is the same as the given type,.toBeAssignableFrom()checks if a type is assignable from the given type,.toBeAssignableTo()checks if a type is assignable to the given type.
Ability matchers:
.toAcceptProps()checks if a JSX component accepts the given props,.toBeApplicablechecks if a decorator is applicable to the given class or class member,.toBeCallableWith()checks if a function is callable with the given arguments,.toBeConstructableWith()checks if a class is constructable with the given arguments,.toBeInstantiableWith()checks if a generic is instantiable with the given type arguments,.toHaveProperty()checks if a type has the given property.
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-errordirectives, - 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