2

私はTSに単純なクラスを持っています:

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>

角度バグですか?またはタイプスクリプトのバグ?

4

1 に答える 1

2

コードの問題は、http 要求によって返されるオブジェクトが、型情報が添付されていないプレーンな JSON オブジェクトであることです。にキャストしたという事実は、<TestObj>コンパイル時のチェックのみをスムーズに実行できるようにしますが、まだ Object であるオブジェクトの実際の型を変更しません。

そのため、メモリ内に TestObj の実際のインスタンスが必要な場合は、受け取った JSON オブジェクトから手動で構築する必要があります。残念ながら、ネイティブな JavaScript JSON デシリアライゼーションでは、この可能性は提供されません。この件に関する詳細情報は次のとおりです。リンク

于 2016-02-16T09:05:25.980 に答える