特にTypeScriptではThrowableを表現できないので型システムの恩恵を受けるために全て正常系の異常系で扱うtype MaybeResult<T> = T | Error; // ここはプロパティ式にしてもいいしなんでも良い const isError = <T>(result: MaybeResult<T>): result is Error => result instanceof Error; const func = (flag: boolean): MaybeResult<string> => (flag ? "success" : Error("error")); const maybeResult = func(true); if (isError(maybeResult)) { // 場合に応じたエラー処理 const b = maybeResult; return; } // 通常の処理 const a: string = maybeResult;