Uma API que costuma devolver { email: "ana@example.com" } também pode devolver { error: "unauthorized" }. Se você escrever "as User" sobre a resposta, o compilador passa a confiar na declaração. O objeto recebido continua igual. A falha só aparece quando o código tenta usar o campo que faltou.

Valide na entrada

Atribua o resultado de response.json() a uma variável unknown. Antes de ler email, confira se o valor é um objeto não nulo, se a propriedade existe e se é uma string. Faça essa verificação na função que conversa com a API. O restante da aplicação pode receber um objeto já validado ou um erro com contexto sobre a resposta inesperada.

function readEmail(value: unknown): string {
  if (
    typeof value === "object" && value !== null &&
    "email" in value && typeof value.email === "string"
  ) {
    return value.email
  }
  throw new Error("Resposta sem e-mail válido")
}

Teste um corpo válido, um objeto sem email e um corpo nulo. Se o contrato exige um endereço utilizável, valide essa regra separadamente. A função acima só confirma o tipo do campo.

Documentação de referência