DEV Community

Discussion on: Custom Type Guards in Typescript

Collapse
 
mainawycliffe profile image
Maina Wycliffe

I don't understand, how is the second one used?

Collapse
 
lioness100 profile image
Lioness100

I think I understand it. If a return type is described as x is y, then typescript assumes that if the function returns true x is y.

declare const x: y | z;
if (isY(x)) {
  // `x` is `y`;
}

// `x` is `y | z`
Enter fullscreen mode Exit fullscreen mode

However, with asserts x is y, typescript will assume that the function will throw if x isn't y.

declare const x: y | z;

// will throw if `x` isn't `y`
assertIsY(x);

// `x` is `y`
Enter fullscreen mode Exit fullscreen mode

Super cool!

Thread Thread
 
mainawycliffe profile image
Maina Wycliffe

Yeah, that is true, it's upto you to do an exhaustive check on whether an object is of that type before returning true.

Thread Thread
 
lioness100 profile image
Lioness100

Yeah, I understood the concept, I was just confused by the difference of asserts x is y vs x is y