In TypeScript, catch clause variables may not have a type annotation (aside from, as of TypeScript 4.0, unknown). This is not specific to async. Here’s an explanation from Anders Hejlsberg:
We don’t allow type annotations on catch clauses because there’s really no way to know what type an exception will have. You can throw objects of any type and system generated exceptions (such as out of memory exception) can technically happen at any time.
You can check for the existence of error.code and error.message properties (optionally using a user-defined type guard) in the catch body.