web-dev-qa-db-fra.com

La variable date fonctionne, mais les fonctions

J'utilise TypeScript 1.4 dans un projet ASP.NET MVC 5.

J'ai un champ de type Date, et cela fonctionne partiellement:

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

Dans le code ci-dessus, les deux premières lignes fonctionnent, affichant la valeur comme "1968-11-16T00: 00: 00", comme prévu. Mais la dernière ligne ne fonctionne pas, en fait le reste du code en dessous de cette ligne n'est même pas exécuté - il se casse simplement, sans message d'erreur.

Ce comportement persiste quelle que soit la fonction Date que j'applique à la dernière ligne; Je pourrais également utiliser dob.getFullYear() etc. et cela échouerait à chaque fois. Pourtant, la variable est du bon type et a la bonne valeur. Le compilateur trouve également les fonctions Date, il compile sans accroc mais à l'exécution il échoue. Des idées?

17
Roy Dictus

Celui-ci comporte deux aspects. La première est que vous devez analyser la date, car vous avez actuellement une représentation sous forme de chaîne. La seconde est que votre variable result n'a pas d'informations de type.

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;

Lorsque vous récupérez un message JSON, vous pouvez lui appliquer une interface qui décrit ce que le serveur a envoyé, afin de détecter les problèmes dans votre code TypeScript - comme celui que vous avez trouvé. Cela empêchera le problème de se reproduire à l'avenir (bien qu'il ne vérifie pas que le JSON fourni correspond à l'interface) ... l'exemple ci-dessous suppose que result a actuellement le type any.

interface NameYourResult {
    dateOfBirth: string;
}

var r: NameYourResult = result;
20
Fenton