4

我不知道如何将从 Web 服务返回的 json 对象数组映射到 Angular 2 应用程序中正确键入的对象数组。

正如您在 Angular 2 的官方 plunker 示例中看到的,预期的对象不是 Hero 类型,它们是 Object 类型,并且 HeroListComponent 的 heros:Hero[] 成员实际上是一个 Object[]。您可以在控制台中看到该数组不是强类型的:

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

4

2 回答 2

3

Angular 2 observable 没有“映射”到模型

如上面链接中的重复问题所示,从 json 对象自动映射到您自己的打字稿类仍然是一个手动过程......

我真的认为 Typescript 会足够聪明,可以在 map() 调用结束时获得 Hero 对象。

在这样的调用结束时应该有一种更简单的方法来获取 Hero[]: .map(res => res.json().data)

于 2016-04-02T05:41:56.163 回答
3

您的浏览器正在运行 JavaScript,可能是 ES5,而不是 TypeScript。在 TypeScript 中,可以给数组一个类型定义,但在 JavaScript 中,数组是一个对象数组。你可以把任何东西放在那里,它不会被输入。

在 ES6 中有类型化数组,但它们实际上不是数组,而是处理二进制数据的对象。

TypeScript 表示法(类型断言)仅用于编译器检查对象数组是否被使用,就好像它只包含Hero对象或兼容的对象,仅此而已。它不会在运行时强制执行,也不会发出任何代码。

于 2016-04-01T21:06:39.520 回答