машинопись - приведи json к интерфейсу - PullRequest
0 голосов
/ 17 мая 2018

У меня есть такой интерфейс:

export default interface IProject extends{
    Id?:number;
    name?:string;
    description?:string;
}

и когда я получаю данные с сервера, файл json включает в себя следующие свойства:

{
    id,
    name,
    description,
    url,
    startDate,
    finishDate
}

но мне нужны только поля id, name и description. Я попробовал это:

response.data.map((p: any) => p as IProject);

но объект включает в себя ненужные данные, такие как url, startdate и finishDate как я могу сопоставить их правильно? Я знаю, что мы можем отобразить их так:

response.data.map((p: any) => {
    return {id:p.id,name:p.name,description:p.description}
});

но есть ли другие лучшие способы сделать это?

1 Ответ

0 голосов
/ 17 мая 2018

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

interface IProject {
  id?: number;
  name?: string;
  description?: string;
}

interface IProjectResponse {
  id?: number;
  name?: string;
  description?: string;
  url?: string;
  startDate?: string;
  finishDate?: string;
}

const mapResponse = (response: IProjectResponse[]) => response.data.map((p) => ({
  id: p.id,
  name:p.name,
  description: p.description,
}));

const response = await fetch(/* .. */);
const data = await response.json();

const projects: IProject[] = mapResponse(data);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...