2016-06-13 8 views
0

Ich lese JSON-Daten in meiner Typoskript-App. Ich habe dieses Tool JSON2TS gefunden, das Schnittstellen von JSON erstellt, so dass Typoskript weiß, was der JSON enthalten muss.Wie verwende ich Json mit Typoskript-Schnittstellen?

Mein json:

{ 
"questions": [ 
    { 
    "text": "Is this a question?", 
    "answers": ["yes", "no", "maybe", "maybe not"], 
    "correct":1 
    }] 
} 

Die generierten Schnittstellen:

declare module namespace { 

export interface Question { 
    text: string; 
    answers: string[]; 
    correct: number; 
} 

export interface RootObject { 
    questions: Question[]; 
} 

} 

Diese Schnittstellen müssen in einer d.ts Datei und verwiesen im Code gespeichert werden. Meine Frage: Wie benutze ich die JSON Daten nach dem Laden mit AJax?

+0

ich über das, was Sie nicht sicher bin, fragen. Wenn Sie ein Objekt haben, das Sie von einem Ajax-Dienst erhalten, haben Sie wie gewohnt Zugriff auf alle seine Eigenschaften und Methoden. All diese Schnittstellen dienen dazu, Ihnen die Möglichkeit zu geben, sie richtig einzugeben. – Alex

+0

Ja, aber Typoskript erlaubt das nicht, wenn Sie den Typ nicht deklarieren. Natürlich können Sie immer "Any" als Typ verwenden, aber dann haben Sie nicht die IDE-Vorteile (Code-Vervollständigung und Fehlerprüfung) – Kokodoko

+0

Aha, also war Ihre Frage, wie Sie Ihr Json-Objekt eingeben, nicht wie Sie es verwenden die JSON-Daten. – Alex

Antwort

1

Mit dieser Definitionsdatei, wenn Sie den Code in dem namespace Namespace ist, können Sie es wie folgt tun:

var questions = <RootObject>functionThatReturnsYourJSONData().questions; 

Wenn Ihr Code nicht in dem namespace Namespace ist, sollte diese Arbeit.

var questions = <namespace.RootObject>functionThatReturnsYourJSONData().questions; 

In jedem Fall ist diese stark typisiert werden würde:

if (questions.length > 0) { 
    console.log(questions[0].text); 
} 
+0

Danke, es funktioniert! Ist das "RootObject" wirklich notwendig? – Kokodoko

+0

Wenn die Funktion, die Ihre Daten zurückgibt, bereits als "RootObject" eingegeben wurde, dann wird no. Ich denke RootObject ist ein Artefakt des JSON-Typs, den du benutzt hast. – NYCdotNet

Verwandte Themen