Helper types for testing your package exported types
- Only depends on typescript installed.
- Easily extendable
I have notice some issues with typescript if your types are too complex, so I recommend using assertTrue
and assertFalse
instead of assert
You test them with the assert method ( wich is just a placeholder, it doesn't run anything ) and the type helpers
import {
assert,
assertTrue,
assertFalse,
HasProperties
} from "typescript-test-utils";
assertTrue<true>(); // ok
assertTrue<false>(); // nop
assertFalse<true>(); // nop
assertFalse<false>(); // ok
assert<true>(true); // ok
assert<false>(true); // nop
type MyType = { a: string };
assertTrue<HasProperties<MyType, "a">>(); // ok
assertFalse<HasProperties<MyType, "a">>(); // nop
assertTrue<HasProperties<MyType, "b">>(); // nop
assertFalse<HasProperties<MyType, "b">>(); // ok
And just run tsc on your test files to check for type errors
{
"scripts": {
"test": "tsc --noEmit src/*.test.ts"
}
}
There are currently some implemented, if you have any idea for a new one send a PR or open an issue
import { assert, HasProperties, Extends, Equals, Not } from "typescript-test-utils";
HasProperties<{ a: string, b: number }, "a" | "b"> // true
HasProperties<{ a: string, b: number }, "a" | "c"> // false
Extends<{ a: string, b: string }, { a: string }> // true
Extends<{ a: string, b: string }, { c: string }> // false
Equals<{ a: string }, { a: string }> // true
Equals<{ a: string, b: string }, { a: string }> // false
Not<true> // false
Not<false> // true
Not<Equals<{ a: string, b: string }, { a: string }>> // true
You only need to make a type that returns true or false, for example:
type Not<T extends boolean> = T extends true ? false : true;
or
type Extends<T, K> = T extends K ? true : false;
These are the definitions of the Not
and Extends
helpers