Best practices for typesafe error handling

What are your best practices for error handling using typescript? Are you throwing (custom?) errors or do you return success/error union types? Or do you do something else?
Was this page helpful?