Date variable works, but functions on it do not

Roy Dictus picture Roy Dictus · May 8, 2015 · Viewed 69.3k times · Source

I'm using TypeScript 1.4 in an ASP.NET MVC 5 project.

I have a field of type Date, and it works partially:

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

In the code above, the first two lines work, showing the value as "1968-11-16T00:00:00", as expected. But the last line doesn't work, in fact the rest of the code below that line isn't even executed -- it just breaks, without error message.

This behavior persists no matter which Date function I apply in the last line; I could also use dob.getFullYear() etc. and it would fail every time. Yet the variable is of the right type and has the right value. The compiler also finds the Date functions, it compiles without a hitch but at runtime it fails. Any ideas?

Answer

Fenton picture Fenton · May 8, 2015

There are two aspects to this one. The first is that you need to parse the date, as you have a string representation currently. The second is that your result variable doesn't have type information.

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;

When you get back a JSON message, you can apply an interface to it that describes what the server has send, in order to catch problems in your TypeScript code - such as the one you found. This will stop the problem occurring again in the future (although doesn't check the supplied JSON matches the interface)... the example below assumes result currently has the any type.

interface NameYourResult {
    dateOfBirth: string;
}

var r: NameYourResult = result;