Types are build-time guarantees, assertions are run-time guarantees.
Do we software developers perhaps emphasise the former a little too much and the latter not quite enough?
One way assertions could help is:
Better error messages
Quite often an API call will return some value which we weren't expecting. It will fail with a cryptic message, e.g. about some value not being a valid number. And a mile-long stack trace. It's difficult and annoying to debug these errors.
Imagine if we added an assertion, which would run on the API response, and would report a more developer-friendly error message.
E.g.:
function assertEmployeeIdIsNumber(id: string) { if (!isNaN(id)) { throw new Exception( `Employee id '${id}' is not a valid number." ); } } Now we can much more quickly & easily pinpoint where in the code this error happened, why it happened, which Backend endpoint caused it and how it could be fixed.
What do you think?
Top comments (0)