Angular2官方例子:强类型json对象数组映射bug
Angular 2 official example: strongly typed json object array mapping bug
我不知道如何将从 Web 服务返回的 json 对象数组映射到 Angular 2 应用程序中正确键入的对象数组。
在plunker中Angular2的官方例子中可以看到,预期的对象不是Hero类型,而是Object类型,而HeroListComponent的heroes:Hero[]成员实际上是一个目的[]。您可以在控制台中看到该数组不是强类型的:
http://plnkr.co/edit/Qa22yzPh3JWI8lNZ99Ik?p=preview
我添加了额外的 console.log() 调用来添加 hero 命令,您可以在浏览器控制台中看到我们没有 Hero[] 而是 Object[]。
显然这里的转换不起作用:
this.http.get(this._heroesUrl)
.map(res => <Hero[]> res.json().data)
.catch(this.handleError);
我们得到的是 Object[] 而不是 Hero[]。
关于如何将 json 映射到正确键入的对象有什么想法吗?
更多信息:
https://angular.io/docs/ts/latest/guide/server-communication.html
你的浏览器是运行JavaScript,可能是ES5,不是TypeScript。在 TypeScript 中,可以给数组一个类型定义,但在 JavaScript 中,数组是对象数组。你可以把任何东西放在那里而且它不是打字的。
在 ES6 中有 typed arrays,但它们实际上不是数组,而是处理二进制数据的对象。
TypeScript 表示法 (type assertion) 仅供编译器检查对象数组是否被用作仅包含 Hero
个对象或兼容对象,仅此而已。它不会在运行时强制执行,也不会发出任何代码。
如上面 link 中的重复问题所示,从 json 对象自动映射到您自己的打字稿 类 仍然是一个手动过程....
我真的认为 Typescript 足够聪明,可以以某种方式进行转换,这样我就可以在 map() 调用结束时获得 Hero 对象。
应该有一种更简单的方法来在这样的调用结束时获取 Hero[]:
.map(res => res.json().data)
我不知道如何将从 Web 服务返回的 json 对象数组映射到 Angular 2 应用程序中正确键入的对象数组。
在plunker中Angular2的官方例子中可以看到,预期的对象不是Hero类型,而是Object类型,而HeroListComponent的heroes:Hero[]成员实际上是一个目的[]。您可以在控制台中看到该数组不是强类型的:
http://plnkr.co/edit/Qa22yzPh3JWI8lNZ99Ik?p=preview
我添加了额外的 console.log() 调用来添加 hero 命令,您可以在浏览器控制台中看到我们没有 Hero[] 而是 Object[]。
显然这里的转换不起作用:
this.http.get(this._heroesUrl)
.map(res => <Hero[]> res.json().data)
.catch(this.handleError);
我们得到的是 Object[] 而不是 Hero[]。
关于如何将 json 映射到正确键入的对象有什么想法吗?
更多信息: https://angular.io/docs/ts/latest/guide/server-communication.html
你的浏览器是运行JavaScript,可能是ES5,不是TypeScript。在 TypeScript 中,可以给数组一个类型定义,但在 JavaScript 中,数组是对象数组。你可以把任何东西放在那里而且它不是打字的。
在 ES6 中有 typed arrays,但它们实际上不是数组,而是处理二进制数据的对象。
TypeScript 表示法 (type assertion) 仅供编译器检查对象数组是否被用作仅包含 Hero
个对象或兼容对象,仅此而已。它不会在运行时强制执行,也不会发出任何代码。
如上面 link 中的重复问题所示,从 json 对象自动映射到您自己的打字稿 类 仍然是一个手动过程....
我真的认为 Typescript 足够聪明,可以以某种方式进行转换,这样我就可以在 map() 调用结束时获得 Hero 对象。
应该有一种更简单的方法来在这样的调用结束时获取 Hero[]: .map(res => res.json().data)