Proper error handling patterns in async/await TypeScript?