Как синхронизировать типы объектов, отправленные из бэкэнда Web API в интерфейс React / Redux - PullRequest
0 голосов
/ 13 сентября 2018

Я написал бэкэнд для моего приложения в .net, который предоставляет мне операции CRUD.Например, ответом на действие POST является совершенно новый объект item:

{"Id":"7575c661-a40b-4161-b535-bd332edccc71","Text":"as","CreatedAt":"2018-09-13T15:29:52.7128732+00:00","LastChange":"2018-09-13T15:29:52.7128732+00:00"}

Теперь мне нужно использовать этот Id в моем веб-интерфейсе (чтобы переписать временный идентификатор, который я сделал на веб-интерфейсе, до тех пор, пока не получу подтверждение загрузкиБыл успешен).Проблема возникает с машинописью, когда я набираю свое групповое действие «как мне кажется, правильным»:

export const uploadItem = (fetch: (text: string) => Promise<Item>) =>
(generateId: () => ItemId) =>
 (text: string) =>
  async (dispatch: Dispatch<ThunkAction<IAction, IAppState, void>>): Promise<IAction> => {
    const id = generateId();
    try {
      dispatch(addItem(id, text));
      const itemWithOfficialId = await fetch(text);
      dispatch(synchronizeItemId(id, itemWithOfficialId.id));
      return dispatch(setAsSynchronized(itemWithOfficialId.id));
    } catch {
      return dispatch(requestFailedForItem(id, errorMessageTypes.UPLOAD, 'Failed to upload. '));
    }
  };

Проблема, которую я вижу, находится в первой строке:

fetch: (text: string) => Promise<Item>

, которая заставляет менясделать:

itemWithOfficialId.id

, потому что мой Item имеет только свойство id и мне нужно извлечь Id.Но машинопись не позволит мне изменить ее на itemWithOfficialId.Id.

Я знаю, что могу создать новую модель Item, которая будет состоять из свойств, возвращаемых с сервера, и использовать ее как Promise<ItemFromServer>, но этонемного глупо для меня, и я хотел знать, есть ли другой способ, как преобразовать их, не создавая новое представление того же объекта?

1 Ответ

0 голосов
/ 15 сентября 2018

Если у вас есть два объекта с разными наборами свойств, даже если имена свойств различаются только в том случае, я не думаю, что вы можете обойтись без объявления двух разных типов.Однако есть такие инструменты, как Пишущая машинка , которые вы можете использовать для автоматического создания объявления ItemFromServer из кода вашего сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...