typescript-将json强制转换到接口

typescript-将json强制转换到接口,json,typescript,interface,Json,Typescript,Interface,我有这样一个界面: export default interface IProject extends{ Id?:number; name?:string; description?:string; } { id, name, description, url, startDate, finishDate } response.data.map((p: any) => { return {id:p.id,n

我有这样一个界面:

export default interface IProject extends{
    Id?:number;
    name?:string;
    description?:string;
}
{
    id,
    name,
    description,
    url,
    startDate,
    finishDate
}
response.data.map((p: any) => {
    return {id:p.id,name:p.name,description:p.description}
});
当我从服务器获取数据时,json文件包含以下更多属性:

export default interface IProject extends{
    Id?:number;
    name?:string;
    description?:string;
}
{
    id,
    name,
    description,
    url,
    startDate,
    finishDate
}
response.data.map((p: any) => {
    return {id:p.id,name:p.name,description:p.description}
});
但我只需要id、name和description字段。我试过这个:

response.data.map((p: any) => p as IProject);
但该对象包含url、startdate和finishDate等不必要的数据 如何正确地映射它们? 我知道我们可以这样绘制它们:

export default interface IProject extends{
    Id?:number;
    name?:string;
    description?:string;
}
{
    id,
    name,
    description,
    url,
    startDate,
    finishDate
}
response.data.map((p: any) => {
    return {id:p.id,name:p.name,description:p.description}
});

但是还有其他更好的方法吗?

我建议您做您正在做的事情,但另外还要为您的服务器响应添加一些类型。这样,您就可以为映射函数获得一些智能感知

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);
可能重复的