Javascript Angular 2类和大型json文件

Javascript Angular 2类和大型json文件,javascript,json,angular,typescript,ecmascript-6,Javascript,Json,Angular,Typescript,Ecmascript 6,目前,与我交互请求JSON的系统基本上会返回一个包含大量数据的批处理文件。在我的例子中,尝试按照Angular 2(Heros)教程的规范定义一个类,然后定义将返回的每个属性几乎是不可能的 我正试图找到一个解决方案来处理这个问题,因为我认为这不是正确的处理方法: 导出类示例{ 建议1:数字, 建议2:字符串, 提案3:{ 道具:弦, 道具:弦, 道具:弦, 道具:弦, 道具:弦, 道具:[{ 道具:弦, 道具:弦, 道具:弦, 道具:弦, 道具:弦, }]; }, 道具:弦, 道具:弦, 提案

目前,与我交互请求JSON的系统基本上会返回一个包含大量数据的批处理文件。在我的例子中,尝试按照Angular 2(Heros)教程的规范定义一个类,然后定义将返回的每个属性几乎是不可能的

我正试图找到一个解决方案来处理这个问题,因为我认为这不是正确的处理方法:

导出类示例{
建议1:数字,
建议2:字符串,
提案3:{
道具:弦,
道具:弦,
道具:弦,
道具:弦,
道具:弦,
道具:[{
道具:弦,
道具:弦,
道具:弦,
道具:弦,
道具:弦,
}];
},
道具:弦,
道具:弦,
提案3:{
道具:弦,
道具:弦,
道具:弦,
道具:弦,
道具:弦,
道具:[{
道具:弦,
道具:弦,
道具:弦,
道具:弦,
道具:[{
道具:弦,
道具:弦,
道具:弦,
道具:弦,
道具:弦,
}];,
}];
},

}
您可以使用接口来表示接收到的json

您可以显式地声明每个属性:

interface Prop3 {
    prop1: string;
    prop2: string;
    prop3: string;
    prop4: string;
    prop5: string;
    prop6: Prop3[];
}

interface Example {
    prop1: number;
    prop2: string;
    prop3: Prop3;
}
您还可以使用:

可索引方法的问题是编译器无法告诉您是否使用了正确的属性名


编辑 如果您不是显式的,并且使用索引接口,则编译器无法知道哪些键是对的,哪些键是错的。
例如,假设我从服务器接收到一个json数据对象,其中包含以下字符串:firstName、lastName、username

如果接口为:

interface Data {
    [key: string]: string;
}

let data: Data; // from server
console.log(data["firstName"]);
console.log(data["firstname"]); // ok but shouldn't be 
console.log(data["dontExists"]); // also ok but shouldn't
另一方面:

interface Data {
    firstName: string;
    lastName: string;
    username: string;
}

let data: Data; // from server
console.log(data.firstName);
console.log(data.firstname); // error: Property 'firstname' does not exist on type 'Data'
console.log(data.dontExists); // error: Property 'dontExists' does not exist on type 'Data'

关于明确,只是为了澄清,我仍然需要写(在我的例子中)1000x行来定义返回的内容仍然正确?确实如此。检查我修改过的答案。你需要问问自己,你是喜欢编写(或者自动化?)这个界面并获得类型安全性,还是不喜欢。谢谢你的编辑,它确实帮助我更好地理解如何处理这个问题。关于自动化接口,您是否建议一些基本逻辑,即。。。如果是(对象中的对象),那么接口X、Y、Z?什么类型的东西?不,我的意思是用一个自动化的工具为你制作,我从来没有用过,但你可以试试这个:或者搜索更多。如果我能把你的评论提高5000次,我会的。谢谢你的提示,尼赞!
interface Data {
    firstName: string;
    lastName: string;
    username: string;
}

let data: Data; // from server
console.log(data.firstName);
console.log(data.firstname); // error: Property 'firstname' does not exist on type 'Data'
console.log(data.dontExists); // error: Property 'dontExists' does not exist on type 'Data'