Ответ Typescript и REST API

#javascript #reactjs #typescript

#javascript #reactjs #typescript

Вопрос:

Позвольте мне предварить этот вопрос, сказав, что я довольно новичок в typescript, но долгое время являюсь разработчиком JavaScript.

У меня есть существующее приложение JavaScript, которое я ищу для перехода на typescript. В приложении JavaScript он выполняет вызов rest API для извлечения данных, затем проверяет, существует ли он, а затем условно отображает приложение. В JavaScript я могу динамически проверять, существуют ли свойства в объекте ответа, и условно отображать это. В typescript он выдает ошибку, потому что данные любого типа, и он не знает, существует ли это свойство или нет.

В приложении typescript довольно часто создается типы для всех ваших ответов API, чтобы вы могли обеспечить безопасность типов для них? Используя node в качестве серверной части, я увидел огромную возможность, когда вы могли бы совместно использовать серверные и интерфейсные модели. В настоящее время я использую .net core для своего серверной части, и я обеспокоен тем, что могу выстрелить себе в ногу, пытаясь всегда создавать модели typescript из моделей entity framework.

Кто-нибудь еще использует .net core для серверной части и реагирует на интерфейс? Как вы обрабатываете ответы API в typescript?

Комментарии:

1. Ваш TS-код будет логически идентичен вашему JS. Вы просто добавите типы, которые описывают, как вы ожидаете, что ответ проанализированного API будет выглядеть, но вам все равно нужно убедиться, что типы совпадают.

Ответ №1:

Я не могу сказать вам, распространено ли это, но мы пишем json-schema файлы для каждой конечной точки. Эти файлы схемы:

  • Используется для проверки тела запроса и генерации ошибок.
  • Используется для создания документации.
  • Преобразован в типы typescript, которые используются как во фронтальной, так и во внутренней части.

Ответ №2:

Мы используем тот же стек, что и you—.Net Базовый бэкэнд / интерфейс React — с помощью typescript. Мы справляемся с этим, создавая типы для объектов, которые отправляет нам серверная часть, а затем преобразуя динамические средства проверки, подобные тем, которые вы упомянули, в определяемые пользователем средства защиты типов.

Итак, грубо говоря, для различных объектов передачи данных, возвращаемых сервером, у нас есть пара тип / тип защиты, которая выглядит следующим образом:

 // type
export type SomeDto = { someKey: string; someOtherKey: number }
// type guard
export const isSomeDto = (returnedObj: any): returnedObj is SomeDto =>
  returnedObject.someKey amp;amp; typeof returnedObj === "string"
  returnedObject.someOtherKey amp;amp; tyepeof returnedObj === "number"
  

Тогда у нас в основном есть следующее в коде выборки:

 const someReturn = fetchDatafromApi(endpoint)
if isSomeDto(someReturn) {
  //now typescript will recognize someReturn as SomeDto
} else {
  // throw or otherwise handle the fact you have bad data from the
  // server
}
  

Таким образом, вы получаете динамическую проверку в javascript во время выполнения и безопасность типов во время компиляции. Эти охранники не очень интересны для написания (и вы захотите их все протестировать), и я полагаю, что если бы возможное количество объектов было больше, мы бы выбрали более автоматизированное решение, подобное @Evert, упомянутому в другом ответе. Но для нескольких объектов и существующих средств проверки javascript это довольно удобный способ заставить печатать ваши результаты API.