Если верите апишке – можете описать сколько угодно вложенную структуру данных. Из вашего комментария:
type User = {
id: number
name: string
username: string
address: {
street: string
geo: {
lat: string
lng: string
}
}
phone: string
website: string
company: {
name: string
catchPhrase: string
bs: string
}
}
чтобы было попроще читать и переиспользовать, можно создавать алиасы типов
type Adress = {
street: string
geo: {
lat: string
lng: string
}
}
type Company = {
name: string
catchPhrase: string
bs: string
}
type User = {
id: number
name: string
username: string
address: Adress
phone: string
website: string
company: Company
}
Если апишке не доверяете, посмотрите в сторону
yup. Он позволяет описать схему валидации, после прохождения которой любые неизвестные данные либо приводятся к необходимому типу, либо валидация падает с ошибкой (которую можно обработать и что-то с ошибкой сделать)