web-dev-qa-db-ja.com

日付変数は機能しますが、その機能は機能しません

ASP.NET MVC 5プロジェクトでTypeScript 1.4を使用しています。

Date型のフィールドがあり、部分的に機能します。

_var dob: Date = result.dateOfBirth;
alert(dob);
var dobAsString = dob.toDateString();
_

上記のコードでは、最初の2行が機能し、期待どおりに「1968-11-16T00:00:00」として値が表示されます。しかし、最後の行は機能せず、実際、その行の下の残りのコードは実行されず、エラーメッセージなしで中断します。

この動作は、最後の行でどの日付関数を適用しても持続します。 dob.getFullYear()なども使用できますが、毎回失敗します。しかし、変数は正しいタイプであり、正しい値を持っています。コンパイラーはDate関数も検出し、問題なくコンパイルしますが、実行時に失敗します。何か案は?

17
Roy Dictus

これには2つの側面があります。 1つ目は、現在文字列表現があるため、日付を解析する必要があることです。 2つ目は、result変数に型情報がないことです。

var result = {
    dateOfBirth: '1968-11-16T00:00:00'
};

// Error, cannot convert string to date
var a: Date = result.dateOfBirth;

// Okay
var b: Date = new Date(result.dateOfBirth);

var result2: any = result;

// Okay (not type information for result2)
var c: Date = result2.dateOfBirth;

JSONメッセージを取得したら、サーバーに送信された内容を説明するインターフェイスを適用して、TypeScriptコードで見つかった問題などの問題をキャッチできます。これにより、将来発生する問題が停止します(提供されたJSONがインターフェースと一致するかどうかはチェックしません)...以下の例では、resultが現在anyタイプを持っていると仮定しています。

interface NameYourResult {
    dateOfBirth: string;
}

var r: NameYourResult = result;
20
Fenton