残念なことに、これを再現するためのコードは広範囲に及ぶため、簡単に私の問題を明らかにしたいと考えています。必要に応じて、より完全なソリューションを投稿します。Typescriptインターフェイスの日付は、実際には文字列です。
まず、私は、インターフェイスを定義しています:
export interface ITest {
myDate: Date;
}
それから私は、テストのためにこれらの配列を作成します。
export const TEST: ITest[]=[{myDate: new Date(1995, 8, 1)}]
IからInMemoryDbServiceに当たっているAngular2でサービスを使用してこれらを公開angular2-in-memory-web-api
。次のように私はこれを呼び出して、配列を取得するコードは次のとおりです。
get(): Promise<ITest[]>{
return this.http.get(this.testUrl)
.toPromise()
.then(response => response.json().data as ITest[])
.catch(this.handleError);
}
を...そして私は私のコンポーネントにそれを持って来る:
this.testService.get().then(tests => {
this.tests = tests;
console.log("Date Type:"+typeof(this.tests[0].myDate));
});
このすべてが正常に動作しますが、問題がありますでそこに結果を示すconsole.log
声明: - それはではありません、私の日付で開催された文字列が1995-09-01T07:00:00.000Z
ですが、主な問題であることを
Date Type:string
その中のデータは、正しいですそれはstring
です! VSコードでは、私はtoDateString
のようなメソッドのコード補完を取得しますが、それらを実行すると(もちろん)私はtoDateString is not a function
を取得します。
問題がresponse => response.json().data as ITest[]
で発生しているのは間違いありませんが、なぜデータが実際にキャストされていないのですかDate
?私は間違っている、私は理解しています。私は私のオブジェクトが私が期待するタイプを得ることができるように、これをどう扱うべきですか?
そして、それはそれを呼び出して、ドキュメントの 'cast'と呼ばれるイベントではありません[type assertion](https://www.typescriptlang.org/docs/handbook/basic-types.html#type-assertions)、それは何らかの形で生成されたjavascriptコードには影響しません。実際の型変換を自分で行う必要があります。そして、それが文字列として来る理由は、Dateを表すためにJSON形式で定義された型がないため、サーバはdate.toString()の結果を送信するだけです。 – artem
ありがとう、正しい言葉ではないので、私の答えからキャストを削除しました。あなたのコメントは実際よりはるかに役立ちます。 –
答えでそれを再利用してもかまいません:-) – artem