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)