---
name: FetchState
lang: ts
domain: core
version: "1.0.0"
algebraic: product
definition: |
  interface FetchState<T> {
    data: T | null
    error: Error | null
    loading: boolean
    refetch: () => Promise<T>
    is_stale: boolean
  }
description: "Estado de un fetch GET con cache stale-while-revalidate. Incluye datos, error, loading, refetch y flag de staleness."
tags: [fetch, state, http, cache, swr, hook]
uses_types: []
file_path: "frontend/types/core/fetch_state.ts"
---

## Campos

- `data` — datos obtenidos, null hasta que llega la primera respuesta
- `error` — error de red o de parsing, null si no hubo error
- `loading` — true mientras hay una peticion en vuelo
- `refetch` — funcion para re-ejecutar la peticion manualmente
- `is_stale` — true cuando se muestran datos del cache mientras se refetchea en background

## Uso

```typescript
import type { FetchState } from '@/types/core/fetch_state'

function useMyHook(): FetchState<User[]> {
  // ...
}
```

## Notas

Retornado por `use_fetch_ts_core`. El patron stale-while-revalidate permite mostrar datos viejos inmediatamente mientras se actualizan en background, mejorando la UX percibida.
