Angular - 在返回的 JSON 数组中强制执行模型格式
Angular - enforcing a model format in a returned JSON array
在使用 Angular 时,我有以下模型:
export interface MyModel {
id: number;
content: string;
}
在服务中,我请求 JSON 具有 MyModel 属性的数据。像这样:
function getMyModel() {
return this.http
.post('http://www.somewhere.com/getOneModel')
.map(result => <MyModel> result.json())
.catch(this.handleError);
}
returned JSON 是这样的:
{ id: 1, content: "Stuff" }
在 getMyModel()
中你会看到,当我 map()
结果时,我通过这样做确保 JSON 符合 MyModel:<MyModel> result.json()
.
到目前为止一切正常。
现在我想 return 模型数组并确认它们都符合 MyModel。
function getLotsOfModels() {
return this.http
.post('http://www.somewhere.com/getLotsOfModels')
.map(result => result.json())
.catch(this.handleError);
}
returned JSON 是这样的:
{[
{ id: 1, content: "Stuff" },
{ id: 2, content: "More stuff" }
]}
在这种情况下,map()
无法确认 JSON 数组元素与 MyModel 一致,因为结果是一个数组。如何检查结果是否正确?
您应该在此处使用 Array
/List
,以表明它是一个集合。
.map(result => Array<MyModel> result.json())
您可以将它们转换为 MyModel[]
。
function getLotsOfModels() {
return this.http
.post('http://www.somewhere.com/getLotsOfModels')
.map(result => <MyModel[]> result.json())
.catch(this.handleError);
}
Typescript 不会进行任何结构检查,因此转换只会在 运行 时失败。如果您在 MyModel
上有任何方法。 Json 不会有它们,当您想调用方法时,您会 运行 遇到问题。
例如,在您获得模型后:
myModel.myMethod();
这将在 运行 时抛出错误,因为底层 JSON 没有定义函数,编译器无法捕获它,因为转换。
在使用 Angular 时,我有以下模型:
export interface MyModel {
id: number;
content: string;
}
在服务中,我请求 JSON 具有 MyModel 属性的数据。像这样:
function getMyModel() {
return this.http
.post('http://www.somewhere.com/getOneModel')
.map(result => <MyModel> result.json())
.catch(this.handleError);
}
returned JSON 是这样的:
{ id: 1, content: "Stuff" }
在 getMyModel()
中你会看到,当我 map()
结果时,我通过这样做确保 JSON 符合 MyModel:<MyModel> result.json()
.
到目前为止一切正常。
现在我想 return 模型数组并确认它们都符合 MyModel。
function getLotsOfModels() {
return this.http
.post('http://www.somewhere.com/getLotsOfModels')
.map(result => result.json())
.catch(this.handleError);
}
returned JSON 是这样的:
{[
{ id: 1, content: "Stuff" },
{ id: 2, content: "More stuff" }
]}
在这种情况下,map()
无法确认 JSON 数组元素与 MyModel 一致,因为结果是一个数组。如何检查结果是否正确?
您应该在此处使用 Array
/List
,以表明它是一个集合。
.map(result => Array<MyModel> result.json())
您可以将它们转换为 MyModel[]
。
function getLotsOfModels() {
return this.http
.post('http://www.somewhere.com/getLotsOfModels')
.map(result => <MyModel[]> result.json())
.catch(this.handleError);
}
Typescript 不会进行任何结构检查,因此转换只会在 运行 时失败。如果您在 MyModel
上有任何方法。 Json 不会有它们,当您想调用方法时,您会 运行 遇到问题。
例如,在您获得模型后:
myModel.myMethod();
这将在 运行 时抛出错误,因为底层 JSON 没有定义函数,编译器无法捕获它,因为转换。