Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 将大json对象映射到typescript中的模型对象_Reactjs_Typescript - Fatal编程技术网

Reactjs 将大json对象映射到typescript中的模型对象

Reactjs 将大json对象映射到typescript中的模型对象,reactjs,typescript,Reactjs,Typescript,我有对象数组,每个对象包含 { Id:"..", name:"..", foo1:"..", foo2:"..", ... } 我只需要这些项目的2个属性,所以我创建了一个接口 export interface IMenuModel{ Id:number; name?:string; } 并在此方法中检索以下数据: fetch(`..`).then((response: Response): Promise<{ value:IMenuModel[]

我有对象数组,每个对象包含

{
 Id:"..",
 name:"..",
 foo1:"..",
 foo2:"..",
 ...
}
我只需要这些项目的2个属性,所以我创建了一个接口

export interface IMenuModel{
    Id:number;
    name?:string;    
}
并在此方法中检索以下数据:

 fetch(`..`).then((response: Response): Promise<{ value:IMenuModel[] }>  => {
                  return response.json();
                })
                 .then((response: { value: IMenuModel[] }): void => {
                   debugger //expected response is array of IMenuModel but it still contains all properties
fetch(`..`)。然后((响应:响应):Promise=>{
返回response.json();
})
.then((响应:{value:IMenuModel[]}):void=>{
调试器//预期响应是IMenuModel的数组,但它仍然包含所有属性
我希望这个响应对象是我的自定义模型(IMenuModel)的数组,但它仍然包含从远程源检索到的所有属性

我可以使用“.map()”函数提取它们,这没问题,但是函数(
响应:{value:IMenuModel[]}
)定义了返回类型,所以我不必这样做(或者每次都必须手动映射它)


为什么在我的对象模型中仍然没有响应?实现这一点最有效的方法是什么?

TypeScript主要是JavaScript上的一个类型层。这些类型不会更改类型化对象。当传输到JavaScript时,类型化被简单地删除。如果应用一个接口(或多个接口)对于JSON对象,您不需要更改对象的性质,只需声明该接口的保证

因此,当您定义
IMenuModel
接口并将其应用于导入的对象时,您的意思是:“我知道并且我可以保证给定对象提供接口中定义的成员。”这个保证是被你的对象所满足的,所以在那里一切都很好。但是这个对象仍然在它的完全荣耀中被传输和恢复。把接口看作最小的保证,而不是对对象的完整描述。

如果您不想要对象的其他成员,您唯一的选择是让服务器只发送您需要的对象部分。如果您不能这样做,您不必担心,因为您的对象满足接口的最低要求。只需忽略其他值