実際にキャストすると、キャストしたタイプのインスタンスが実際にはありません。タスクのインスタンスではなく、リテラル形式のオブジェクトのみを宣言します。
それだけでキャストオブジェクトがタイプの構造に従っていることを確認するために活字が提供する方法です場合。しかし、それは設計時/コンパイル時にのみ実行時に何かではありません。
あなたが内容に基づいて、新しいオブジェクトをインスタンス化する必要があるタイプのメソッドを使用することができるようにしたい場合:
public getTask(): Observable<Task> {
return this._http
.get("url")
.map(res => {
let content = res.json().data;
let task = new Task();
task.name = content.name;
task.status = content.status;
return task;
});
}
詳細については、この質問を参照してください。
編集
あなたは、このようなTask
クラス宣言し、@のssubeのコメントを以下に示します。インスタンス化が容易になるだろう。この方法で
export class Task {
(...)
constructor(obj:{name:string, status:string}) {
this.name = obj.name;
this.status = obj.status;
}
(...)
}
を:
public getTask(): Observable<Task> {
return this._http
.get("url")
.map(res => new Task(res.json().data));
}
問題は、これが型_cast_ではないということですが、 _assertion_とタイプします。これは、型変換の実行時サポートを意味しません。 'task'は' Task'型のものだとコンパイラに伝えていますが、実際は 'json'から解析された' Object'型のものです。 JSONのこの問題は、TypeScriptの多少の共通の問題です。実際にはデコレータを使用してソリューションに取り組んでいます(もっと_testing_と似ています)。 –