export const getTransactionStateWithTxHash: GetTransactionStateWithTxHash = (
  txHash: string,
) =>
  KStadiumInstance.get(`${SUB_URL}/transaction?txHash=${txHash}`).then(
    (res) => res.data,
  );

getTransactionStateWithTxHash 함수에서 만약, txHash가 null인 경우에 대해 예외처리가 진행되게 하고 싶은 케이스이다.

따라서 코드를 아래와 같이 수정을 해야한다.

export const getTransactionStateWithTxHash: GetTransactionStateWithTxHash = (
  txHash: string | null,
) => {
  if (txHash === null) {
    // txHash가 null인 경우에 예외 처리
    throw new Error('txHash is null');
  }

  return KStadiumInstance.get(`${SUB_URL}/transaction?txHash=${txHash}`).then(
    (res) => res.data,
  );
};

호출하는 코드에서는 try-catch 블록을 사용하여 예외 처리할 수 있다.

try {
  const result = await getTransactionStateWithTxHash(txHash);
  // 성공한 경우의 로직
} catch (error) {
  console.error('API 호출 중 에러 발생:', error.message);
  // 에러 처리 로직
}

🎩 내가 헤맸던 원인

<aside> 💡 txHash 타입을 string으로 지정을 해놓았음에도 txHash타입이 null인 경우 실행된다.

함수 매개변수의 TypeScript 타입 어노테이션은 해당 매개변수가 어떤 타입이어야 하는지 정의하는 데 사용됩니다. 그러나 TypeScript는 이러한 어노테이션을 실행 시간(runtime)에 강제하지 않습니다. 따라서 TypeScript 타입 어노테이션은 코드의 가독성과 타입 검사를 위한 도구로 사용됩니다.

함수를 호출할 때 **txHash**가 **null**인 경우에 실행되는 것은 TypeScript가 아닌 JavaScript의 실행 동작 때문입니다. TypeScript는 컴파일 시간에 타입 체크를 수행하고 컴파일러 에러를 발생시키지만, 실행 시간에는 이러한 타입 정보가 사라집니다.

따라서 TypeScript로 **txHash**의 타입을 **string**으로 지정했더라도, 코드를 실행할 때 **txHash**에 null 값을 전달하는 것은 JavaScript에서 허용되는 동작입니다. 이러한 경우에 대한 예외 처리나 유효성 검사는 개발자가 명시적으로 코드 내에 추가해야 합니다. 이를 위해 함수 내에서 **txHash**가 **null**인지 체크하고 예외 처리를 수행하거나 유효성 검사를 추가해야 합니다.

</aside>