Skip to Content

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.

Quick StartReference

Helpers

If you are used to testing, a type test should look familiar:

import { , } from "tstyche"; function < extends { : number }>(: , : ) { return . === .; } ("isSameLength", () => { (([1, 2], [1, 2, 3]))..<boolean>(); (("one", "two"))..<boolean>(); ()...(1, 2); });

TSTyche lets you organize tests using:

  • helpers: test(), it() and describe()
  • run mode flags: .only, .skip and .todo

Assertions

The expect style assertions can check either the inferred type of an expression or a type directly:

import { type , } from "tstyche"; type <> = { [ in keyof ]+?: [] | <[]>; }; type < extends object> = & { : boolean }; <<<{ : string }>>>()..<{ ?: string | <string>; : boolean; }>(); <<>>()...<[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
  • .toBeApplicable checks 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

Runner

The tstyche command is the heart of TSTyche. It lets you 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'

That is just the beginning. It even lets you:

  • check messages of errors suppressed by @ts-expect-error directives
  • generate type tests from a template file
  • run tests in watch mode

Try It Out

Try TSTyche online on StackBlitz:

Open in StackBlitz

Last updated on