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.
Helpers
If you are used to test JavaScript, a simple type test file 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 organize, debug and plan tests TSTyche has:
test()
,it()
anddescribe()
helpers,- with
.only
,.skip
and.todo
run mode flags.
Assertions
The assertions can be used to write type tests (like in the above example) or mixed in your unit tests:
import assert from "node:assert";
import test from "node:test";
import * as tstyche from "tstyche";
function milliseconds(value: number) {
if (typeof value === "number" && !Number.isNaN(value)) {
return value * 1000;
}
throw new Error("Not a number");
}
test("milliseconds", () => {
const sample = milliseconds(10);
assert.equal(sample, 10_000);
tstyche.expect(sample).type.toBe<number>();
// Will pass as a type test and not throw at runtime
tstyche.expect(milliseconds).type.not.toBeCallableWith("20");
});
Here is the list of all matchers:
.toBe()
,.toBeAssignableTo()
,.toBeAssignableWith()
compare types or types of expression,.toAcceptProps()
checks the type of JSX component props,.toBeApplicable
ensures 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,.toRaiseError()
captures the message or code of a type error.
Runner
The tstyche
command is the heart of TSTyche. For example, it can select test files by path, filter tests by name and pass them through a range of TypeScript versions:
tstyche query-params --only multiple --target '>=5.0 <5.3'
This simple! (And it has watch mode too.)
Last updated on