Angular - 在返回的JSON数组中强制执行模型格式

问题描述 投票:2回答:2

使用Angular时,我有以下模型:

export interface MyModel {
    id: number;
    content: string;
}

在服务中,我发出了具有MyModel属性的JSON数据的请求。像这样的东西:

function getMyModel() {
    return this.http
       .post('http://www.somewhere.com/getOneModel')
       .map(result => <MyModel> result.json())
       .catch(this.handleError);
}

返回的JSON是这样的:

{ id: 1, content: "Stuff" }

getMyModel()中你会看到,当我在map()结果时,我确保JSON符合MyModel:<MyModel> result.json()

到目前为止,一切都很好。

现在我想返回一个模型数组并确认所有模型都符合MyModel。

function getLotsOfModels() {
    return this.http
       .post('http://www.somewhere.com/getLotsOfModels')
       .map(result => result.json())
       .catch(this.handleError);
}

返回的JSON是这样的:

{[
    { id: 1, content: "Stuff" },
    { id: 2, content: "More stuff" }
]}

在这种情况下,map()无法确认JSON数组元素是否与MyModel一致,因为结果是数组。如何检查结果是否正确?

angular typescript angular2-services
2个回答
4
投票

你可以将它们投射到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没有定义函数,并且编译器因为强制转换而无法捕获它。


0
投票

你应该在那里使用Array / List来表明它是一个集合。

.map(result => Array<MyModel> result.json())
© www.soinside.com 2019 - 2024. All rights reserved.