assert
import { assert } from "tsafe/assert";
declare const x: number | string;
assert(typeof x === "string");
x.toLowerCase(); //<= Here TypeScript knows that x is a string
The classic assert function, it takes a value as input, if the value is falsy it throws or else it does nothing. Functionally it can be summed up to this:
function assert(condition) {
if (!condition) {
throw new Error();
}
}
Typewise however, it takes advantage of the asserts condition statement. If you pass a type guard as value TypeScript can make inference on what happens after the
assert
instruction.Assert can also be used to confirm assertion on types.
You can for example test if a type extends another by doing:
import { assert } from "tsafe/assert";
type A = "foo" | "bar";
type B = "foo" | "bar" | "baz";
//You will get red squiggly lines if A does not extend B
assert<A extends B ? true : false>();
You can also test the equality of two types with:
When the value is falsy assert throws an instance of
AssertionError
. Assertion error, extends Error and can be imported like this:import { AssertionError } from "tsafe/assert";
A specific error message can be passed as second argument to the assert function.
import { assert, AssertionError } from "tsafe/assert";
try {
assert(false, "foo bar baz");
} catch (error) {
console.log(error instanceof AssertionError); // true
console.log(error.message); // foo bar baz
}
Last modified 8mo ago