throw yield one of these things?foo is still string | undefined after the if-condition. If I instead do:undefined input gives the same failure, but I'm wondering if there are any subtle differences in runtime behaviour for more complex programs?