Description
TypeScript compiler allows to define a function marked explicitly with a return type, with code branches which lead to an inconclusive return value!
I know It is valid in JavaScript function not to return a value on all code path, however in TypeScript being a javascript typed superset, I can imagine having a poor written function [without return value on all code path] could potentially break other codes and I'm talking null-references, type mismatch, NaN
, ...
I believe when using TypeScript code in an explicitly typed expression, no-one needs all the ugly plumbings, input or type validation, undefined
checking, ... One needs to be sure to write a code that couldn't break the way a dynamic language like javascript could!
The following is a valid JavaScript code and it could compile within TypeScript:
function SomeMethod() { }
When you explicitly mention that the method has a return value, the compiler throw an error:
function SomeMethod(): number { }
However it is not the case when the function does not return in all code path, and I don't understand if this is by design why bother preventing above code from compiling in the first place!
The followings are all wrong in a typed context yet the compiler ignores them as a valid code:
function SomeMethod(): number {
return;
}
function SomeMethod(): number {
return null;
}
function SomeMethod(): number {
if (false)
return 1;
}
function SomeMethod(): number {
try {
return 0;
}
catch (ex) {
}
}