is
is is meant to be used in conjunction with assert and enable you to tell the compiler:
"Trust me this
value
is of type T
" or "Trust me this value
is not of type T
"
import { assert } from "tsafe/assert";
import { is } from "tsafe/is";
type Circle = { radius: number };
type Square = { sideLength: number };
type Shape = Circle | Square;
declare const shape: Shape;
//You: Trust me TypeScript, I know that shape is a Circle.
assert(is<Circle>(shape));
//TypeScript: Ok if you say so...it has a radius then.
shape.radius;
Equally useful you can tell TypeScript that your shape is not a
Square
, it will infer that, it is then a Circle
.//You: Trust me TypeScript, I know that shape is not a Square.
assert(!is<Square>(shape));
//TypeScript: Ok so by elimination it should be a Circle!
shape.radius;
It is important to understand that here that when you run the instruction
assert(typeGuard<Circle>(shape))
if the shape happens not to be a Circle you won't get an error at runtime.Last modified 4mo ago