Вопрос проверяет понимание различий в подходах к обработке ошибок между TypeScript и Java, а также причин отсутствия checked exceptions в TypeScript.
TypeScript, будучи надстройкой над JavaScript, наследует его динамическую природу обработки ошибок. В JavaScript исключения не являются частью системы типов — любая функция может выбросить любое исключение в любой момент. TypeScript не добавляет checked exceptions (как в Java), потому что это противоречит философии языка и усложнило бы интеграцию с существующим JavaScript-кодом.
TypeScript использует возвращаемые типы для явного указания возможных ошибок. Например, можно вернуть объект с полем error или использовать discriminated unions:
type Result<T> = { success: true; data: T } | { success: false; error: string };
function parseJSON(json: string): Result<any> {
try {
const data = JSON.parse(json);
return { success: true, data };
} catch (e) {
return { success: false, error: (e as Error).message };
}
}
const result = parseJSON('invalid');
if (result.success) {
console.log(result.data);
} else {
console.error(result.error);
}Этот подход делает обработку ошибок явной и типобезопасной, не требуя checked exceptions.
TypeScript не включает throws из-за своей динамической основы и стремления к простоте. Вместо этого рекомендуется использовать возвращаемые типы для явной обработки ошибок, что делает код более предсказуемым и легким для понимания, особенно в больших проектах.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию