If you forget to do the check, you will get a falsy value. Hope you remember to do it every single time, and hope all your team members remember!
If a team member writes
function extractEmail(text) {
return x.match(/someregex/);
}
and you call extractEmail(x), you might get a null value.
If you assume you can't get a null value, you might try to do further processing:
let [name, host] = extractEmail(x).split('@')
and get a type error thrown. That is, if you're lucky.
In the more common situation, you will actually save that to a database and that database will happen to accept null values by default, and then all hell will break loose in another totally distant bit of the code that naively fetches a list of emails from the table, grouped by host name. And you will have to chase down the bit of code that inserted that null in.
This is approximately what development without types looks like. When this happens to you, I hope you remember the following bit of advice: It doesn't have to be this way :) Alternatively you can start doing paranoid validation everywhere. That works too, except the nice thing about a type system is that it can properly track whether you need to do that or not (see https://github.com/spion/branded-types for one TS technique on how to do that)