How to declare a function that throws an error in Typescript
In Java I would declare a function like this:
public boolean Test(boolean test) throws Exception {
if (test == true)
return false;
throw new Exception();
}
And I can use this function without handling the exception.
If it is possible, how to do the same in Typescript? The compiler will tell me that I can't use the function without a try/catch.
There is no such feature in TypeScript. It's possible to specify error type only if a function returns an error, not throws it (this rarely happens and is prone to be antipattern).
The only relevant type is never
. It is applicable only if a function definitely throws an error, it cannot be more specific than that. It's a type as any other, it won't cause type error as long as it doesn't cause type problems:
function Test(): never => {
throw new Error();
}
Test(); // won't cause type error
let test: boolean = Test(); // will cause type error
When there is a possibility for a function to return a value, never
is absorbed by return type.
It's possible to specify it in function signature, but for reference only:
function Test(test: boolean): boolean | never {
if (test === true)
return false;
throw new Error();
}
It can give a hint to a developer that unhandled error is possible (in case when this is unclear from function body), but this doesn't affect type checks and cannot force try..catch
; the type of this function is considered (test: boolean) => boolean
by typing system.
You can mark the function with @throws
jsdoc at least. Even though it does not provide static analysis errors in typescript compiler, some good IDE or linter may still report a warning if you try to disregard the function that throws...
/**
* @throws {Error}
*/
function someFunc() {
if (Math.random() < 0.5) throw Error();
}
someFunc();
It is not possible at this moment. You can check out this requested feature: https://github.com/microsoft/TypeScript/issues/13219