[英]Observable Map does not cast to typescript class
我正在使用角度2,并且尝试调用端点以返回对象集合。
我有以下TypesScript类
export class Route
{
public branchId: number;
public branch: string;
public isTest: boolean = true;
}
我有一个api端点,它返回以下Json
[{"id":610,"branch":"Coventry"},{"id":620,"branch":"Shoreham"}]
我有一个使用以下代码调用端点的路由服务
public getRoutes(): Observable<Route[]>
{
const url = 'http://localhost/routes';
return this.http.get(url)
.map((response: Response) =>
{
const routes: Route[] = response.json() as Route[];
if (routes.length > 0) {
console.log(routes[0].isTest);
//This returns undefined I was expecting the boolean value true
}
return routes;
}
)
.catch(e => this.httpErrorService.handleError(e));
}
似乎没有将response.json()强制转换为数据类型Route。 为什么是这样?
您不能像在TypeScript中那样进行严格的转换,而让对象成为该类型。 强制转换只是一个转译技巧,可以告诉其余代码您正在使用Route
数组。 要真正使json数据具有Route
类型,而不仅仅是Object
类型,可以使用assign
方法键入它们,如下所示:
const routes: Route[] = (response.json() as []).map((obj) => {
return Object.assign(new Route(), obj);
}) as Route[];
如果json数据确实设置了所有属性,则无需使用assign
方法,因为此时您正在针对接口进行开发,该接口应该像处理类型对象一样工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.