Я написал бэкэнд для моего приложения в .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>
, но этонемного глупо для меня, и я хотел знать, есть ли другой способ, как преобразовать их, не создавая новое представление того же объекта?