Angular 2.0 和 Http 请求。类型转换物体。类型转换错误

标签 angular typescript casting angular2-http

我在 TS 中有简单的类(class):

export class TestObj
{
  public name:string;
  public id:number;
  public example:string;

}

简单的服务:

@Injectable()
export class SimpleService
{
    private testObj:TestObj = new TestObj();

    public constructor(@Inject(Http) private http:Http){}

public getTestObj():void
{

this.http.get("/rest/test2").map(res =>  res.json())
      .do(data => console.log(<TestObj> data))
      .catch(resp => Observable.throw(resp.json().error))

      .subscribe(tobj => {
      this.tobj = tobj;
      console.log(this.tobj);
      }, error => {log.error(error)})

}

如果我在 getTestObj() 之前在控制台日志 SimpleService.testObj 中打印,我会看到

<TestObj>

,但如果我运行 getTest,日志将是

<Object>
<Object>

这是 Angular 错误吗?或者 typescript 错误?

最佳答案

您的代码的问题在于,您的 http 请求返回的对象是纯 JSON 对象,没有附加任何类型信息。事实上,您将其转换到 <TestObj>仅允许编译时检查顺利运行,但不会更改仍为 Object 的对象的实际类型。

因此,如果您想在内存中拥有 TestObj 的实际实例 - 您必须根据收到的 JSON 对象手动构造它。不幸的是,原生 javascript JSON 反序列化不提供这种可能性。以下是有关该主题的更多信息:link

关于Angular 2.0 和 Http 请求。类型转换物体。类型转换错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35427458/

相关文章:

javascript - 仅导入一个函数是否也会运行该文件中的其他函数?

file - Ionic 2 文件插件使用示例

C 编译器使用常量的默认行为

C++ - 允许通过基类(接口(interface))访问,禁止通过派生类(具体实现)访问?

c++ - 如何在 C++ 中初始化指向特定内存地址的指针

django - CSRF token 丢失或不正确。 Django + Angular 2

angular - (TYPESCRIPT) 在用户输入后延迟 keyup 几秒钟

typescript - Angular 2 - 为什么我需要 zone.run()?

angular - rxjs - 当 observable 开始执行时做一些事情

javascript - 在 Angular 6 react 形式的单选按钮的基础上禁用文本区域