[typescript] 타입스크립트에서 예외 처리를 잘하는 방법은 무엇인가요?
1. 타입 안전한 예외 처리
타입스크립트에서는 에러를 던지고, 처리하는 방법으로 try
, catch
, finally
블록을 사용합니다. 이를 통해 예외 처리가 가능하며, 런타임 에러를 잡아 안정적으로 처리할 수 있습니다.
try {
// 예외 발생 가능한 코드
throw new Error('예외 발생!');
} catch (error) {
console.error(error);
} finally {
// 정리 코드
}
2. 사용자 정의 예외 처리
사용자 정의 예외를 만들어서 특정 예외 상황에 대해 명확하게 처리할 수 있습니다.
class CustomError extends Error {
constructor(message) {
super(message);
this.name = 'CustomError';
}
}
try {
throw new CustomError('사용자 정의 예외 발생!');
} catch (error) {
console.error(error);
}
3. 에러 핸들링과 반환 타입
함수나 메서드에서 예외가 발생할 수 있는 경우, try/catch
를 사용하여 에러를 잡고 적절한 처리를 한 후 반환 타입을 명확히 지정하는 것이 좋습니다.
function divide(x: number, y: number): number {
try {
if (y === 0) {
throw new Error('0으로 나눌 수 없습니다.');
}
return x / y;
} catch (error) {
console.error(error);
return -1;
}
}
4. 타입 가드와 예외 처리
타입 가드를 사용하여 런타임 예외를 방지하고, 예외를 타입 안전하게 처리할 수 있습니다.
interface Circle {
kind: 'circle';
radius: number;
}
interface Square {
kind: 'square';
sideLength: number;
}
type Shape = Circle | Square;
function getArea(shape: Shape): number {
switch (shape.kind) {
case 'circle':
return Math.PI * shape.radius ** 2;
case 'square':
return shape.sideLength ** 2;
default:
const _exhaustiveCheck: never = shape;
return _exhaustiveCheck;
}
}
5. 비동기 예외 처리
비동기 작업에서 예외를 처리할 때는 async/await
를 활용하여 try/catch
를 사용합니다.
async function fetchData() {
try {
const response = await fetch('https://api.example.com/data');
const data = await response.json();
return data;
} catch (error) {
console.error(error);
return null;
}
}
타입스크립트에서는 try/catch
와 같은 구조를 통해 예외를 안전하게 처리할 수 있으며, 타입 안전성을 유지하면서 예외 상황을 다룰 수 있습니다.