2016-07-13 10 views
0

Ich bin neu zu Typoskript, also versuche ich, den Dreh raus zu bekommen.Wie werden ISO-Datumszeichenfolgen in TypeScript behandelt?

Eine Netzwerkanforderung gibt ein JSON-Objekt mit einem Feld im ISO-Datumsformat zurück.

data : Data = {when: "2016-07-13T18:46:01.933Z"} 

Wenn ich die Art Signatur für diese Schnittstelle zu erstellen, ist es eine Möglichkeit, anzugeben, dass dies tatsächlich ein ISO-Zeitstempel ist oder muss ich nur Zeichenfolge verwenden?

Ich fand heraus, ich könnte einen Typ Alias ​​verwenden, der mental hilft, aber nicht wirklich die ISO-Zeichenfolge validiert.

type iso = string 
interface Data { 
    when: iso 
} 

Auf einer ähnlichen Ader, ich bin gespannt, ob es überhaupt ist js Validierung von diesen Typoskript Anmerkungen zu erzeugen, so dass ich die Informationen, die vom Endpunkt empfangen validieren kann, da sonst der Rest meiner getippt Anwendung wertlos.

Wenn das möglich ist, dann wäre es wirklich cool, wenn diese ISO-Zeichenfolge in ein tatsächliches Date-Objekt umgewandelt werden könnte.

Wie ich schon sagte, ich bin neu in Typoskript, also bin ich mir nicht sicher, ob dies außerhalb des Umfangs von was Typoskript tun soll.

Antwort

2

Nein, das ist nicht möglich. Für Javascript gibt es nichts mit Interfaces von Typoskripten zu tun. (JS wird überhaupt nicht für Schnittstellen generiert). Außerdem werden alle Typprüfungen zur Zeit des Kompilierens oder des Übertragens durchgeführt, nicht zur Laufzeit.

Was Sie können tun, ist zu verwenden reviver Funktion beim Parsen von JSON. Zum Beispiel:

const datePattern = /\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)/; 
let json = '{"when": "2016-07-13T18:46:01.933Z"}'; 

let result = JSON.parse(json, (key: any, value: any) => { 
    let isDate = typeof value == 'string' && datePattern.exec(value); 
    return isDate? new Date(value) : value; 
}); 

Sie können auch Date Eigenschaft von Schlüssel und im Falle identifizieren es nicht das Datum Muster überein Sie werfen einen Fehler könnten oder tun, was Sie wollen.

+0

[hier ist eine andere Frage] (http://stackoverflow.com/questions/38361504/how-to-handle-duck-typed-union-types-to-typescript-interfaces) wenn Sie dafür sind;) – Chet

Verwandte Themen