Typing an API response as its expected interface is a claim about a server you do not control, checked by nothing.
// a lie, checked by nothing
const order = await res.json() as Order
// honest, and forces a decision
const raw: unknown = await res.json()
const order = OrderSchema.parse(raw) // zod, or similar
// the value: a shape change upstream fails at the
// boundary with a message naming the field, rather than
// as undefined somewhere deeper.
The cast is the most common lie in a TypeScript codebase and it is comfortable because the compiler stops complaining. Parsing at the boundary costs a schema definition per response and turns an upstream change into an error with a field name, which is the difference between a five-minute diagnosis and an afternoon.