Error.cause в JavaScript - основные моменты:Проблема классической обработки ошибок
В многоуровневом коде при оборачивании ошибок теряется стек вызовов и тип исходной ошибки. Обычно это выглядит так:
throw new Error('Something went wrong: ' + err.message);При этом теряется контекст, усложняется отладка.
Error.cause: решение проблемы
Свойство cause позволяет сохранить исходную ошибку при создании новой.
Теперь доступны оба стека вызовов: верхнего уровня и исходной ошибки.
Пример вывода:
Error: Something went wrong
at ...
Caused by: SyntaxError: Unexpected token b in JSON at position 2
at JSON.parse
at ...
Более точные проверки в тестах
С cause можно проверять не только верхнеуровневую ошибку, но и её причину:
expect(err.cause).toBeInstanceOf(ValidationError);
Тесты становятся точнее и надёжнее.
Подводные камни и рекомендации
- cause не выводится автоматически через
console.error(err) — нужно логировать отдельно.- Не стоит оборачивать каждую мелкую ошибку — это может усложнить отладку.
-
console.error(err.stack) выводит только стек текущей ошибки — для полного стека нужно обращаться к err.cause.stack. Вывод полной цепочки ошибок можно реализовать через вспомогательные функции.
Поддержка в средах:
- Chrome 93+, Firefox 91+, Safari 15+, Edge 93+
- Node.js 16.9+
- Bun и Deno (актуальные версии)
Для TypeScript: требует
"target": "es2022" и "lib": ["es2022"].Статья: https://habr.com/ru/companies/timeweb/articles/967440/