@ForsakenHedgehog

Как типизировать данные приходящие по api в Typescript?

Не понимаю типизацию в некоторых случаях.

Есть node_telegram_bot_api, на нём решил потренироваться с typescript (ранее с типизированными языками работал совсем немного, только всякие задачки на учёбе решаем на с++).

Когда я сам создаю переменные или объекты/массивы - я знаю какой у них должен быть тип данных.
Когда использую данные, которые приходят из вне - впадаю в ступор.
Места ступора в комментариях внутри кода:

const TelegramBot = require('node_telegram_bot_api');

const bot: /*  нужно ли обозначать тип в данном случае? */ = new TelegramBot(TOKEN, {  
    polling: true
})

bot.on("message", (msg: /* Сюда приходит объект с разной глубиной вложенности данных.
Тип object с пречислением всех возможных данных { ... } - не кажется правильным, хотя я может быть и ошибаюсь*/) => {
    bot.sendMessage(msg.chat.id, "Hello world")!
})
  • Вопрос задан
  • 1253 просмотра
Решения вопроса 2
@RidgeA
можно описать интерфейс и указать что msg соответствует определенному интерфейсу
Ответ написан
@abberati
frontend-разработчик
Если верите апишке – можете описать сколько угодно вложенную структуру данных. Из вашего комментария:

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. Он позволяет описать схему валидации, после прохождения которой любые неизвестные данные либо приводятся к необходимому типу, либо валидация падает с ошибкой (которую можно обработать и что-то с ошибкой сделать)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы