2016-06-13 10 views
0

私のtypescriptアプリでJSONデータを読んでいます。私はJSONからインターフェイスを作成するこのツールJSON2TSを見つけました。そのため、typescriptはjsonに含まれている必要があることを認識します。typescriptインターフェイスでjsonを使用するには?

マイJSON:

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

生成されたインタフェース:

declare module namespace { 

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

export interface RootObject { 
    questions: Question[]; 
} 

} 

これらのインタフェースはd.tsファイルに保存され、コードで参照する必要があります。私の質問:実際にjsonデータをajaxでロードした後、実際にどのように使用するのですか?

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

コードがnamespace名前空間に含まれていない場合、これは動作するはずです:あなたのコードがnamespace名前空間にある場合、あなたはこのようにそれを行うことができ、その定義ファイルで

+0

私はあなたが求めるものについてはよく分かりません。いくつかのajaxサービスから取得したオブジェクトがある場合、そのプロパティとメソッドにはいつでもアクセスできます。これらのすべてのインターフェイスは、適切に入力する機能を提供しています。 – Alex

+0

はい、ただし、型を宣言していない場合は型付きは許可しません。もちろん、あなたはいつでも型として "any"を使うことができますが、IDEの利点(コード補完とエラーチェック)を持たないのです – Kokodoko

+0

ああ、あなたの質問はあなたのjsonオブジェクトの使い方ではなく、 jsonデータ – Alex

答えて

1

、。いずれの場合も

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

、これは強く型付けされたことになります。

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

ありがとう、それは動作します!また、 "RootObject"は本当に必要ですか? – Kokodoko

+0

あなたのデータを返す関数が既に 'RootObject'として型付けされている場合は、noを返します。私はRootObjectがあなたが使用していたJSONタイパーのアーティファクトだと思う。 – NYCdotNet

関連する問題