2016-11-11 25 views
0

Ich weiß nicht, was hier vor sich geht ... aber anscheinend erkennt TS Datum nicht als Datum, stattdessen denkt es, dass es eine Zeichenfolge ist.Typoskript erkennt Datum nicht als Datum?

Hier ist der Code, den ich die Date speichern verwenden:

var validUntil = new Date(); 

validUntil.setSeconds(validUntil.getSeconds() + tokenResponse.expires_in); 
tokenResponse.valid_until = validUntil; 

Und das ist meine TokenResponse Klasse:

export class TokenResponse { 
    access_token: string; 
    token_type: string; 
    expires_in: number; 
    valid_until: Date; 
    error: string; 
    error_description: string; 
} 

Und hier ist, wo die Ausnahme ausgelöst wird:

userToken && userToken.valid_until.getTime() >= new Date().getTime() 

Hier ist die Ausnahme:

enter image description here

Irgendwelche Ideen, was falsch ist?

Danke!

EDIT

By the way, ich glaube nicht, es zu Date variable works, but functions on it do not verwandt ist, da ich ein neues Date

+0

Beitrag ein vollständiges minimales Beispiel, das das Problem reproduziert. Wir haben unter anderem keine Ahnung was UserToken ist. –

+0

@ JBNizet kommt es von meiner API. 'userToken == TokenResponse' – eestein

+0

Wenn es von Ihrer API kommt, denke ich, es ist JSON, und JSON hat keine Daten. Nur Zeichenfolge, Zahl, Boolesch. Und ein JSON-Objekt wird niemals eine Instanz irgendeiner Klasse sein. Auch hier würde ein vollständiges Beispiel helfen. –

Antwort

2

In Code erstellen, die hier nicht behandelt ist, wird der Wert von userToken.validUntil ist als String gesetzt werden. Sie werden sehen, wenn Sie typeof userToken.validUntil vor dem Teil des Codes überprüfen, wo getTime() Fehler aufrufen.

Vergewissern Sie sich bei der Einstellung userToken.validUntil, dass Sie immer ein Objekt Date zuweisen. Wenn Sie JSON userToken sind Deserialisieren, dann stellen Sie sicher, dass der Deserializer Datum Strings bisher Objekte oder für eine schnelle Lösung do konvertiert (wenn auch nicht empfohlen):

userToken.validUntil = new Date(userToken.validUntil as any); 

Beachten Sie Folgendes:

var o = { d: new Date() }; 
localStorage.setItem("test", JSON.stringify(o)); 
o = JSON.parse(localStorage.getItem("test")); 
typeof o.d === "string"; // true 
+0

Danke David, das einzige Mal, dass ich 'validUntil' gesetzt habe, ist da:/Das einzige, was mir einfällt, ist vielleicht, dass der lokale Speicher den Typ ändert? – eestein

+0

Ich habe gerade Ihr Update überprüft. Ist das nicht das Gleiche wie das, was ich gemacht habe? 'var valueUntil = new Datum(); validUntil.setSeconds (validUntil.getSeconds() + tokenResponse.expires_in); tokenResponse.valid_until = validUntil; ' – eestein

+0

Ok ... also das Problem hängt mit dem Speicher zusammen ... gibt es eine Möglichkeit, es zu zwingen," Date "zu speichern? – eestein

Verwandte Themen