2016-08-23 22 views
1

TypeScriptを使用してJavaScriptコードを入力します。また、レスポンスデータの形式を定義するために、Ajax呼び出しにタイプヒントを使用します(successコールバック内)。これは次のようになります。TypeScript:jQueryを使用したAJAX呼び出しのヒント成功データ

interface AjaxResponseInterface { 
    width:number; 
    height:number; 
    etc:any; 
} 

function ajax(element_id:number):JQueryPromise<any> { 
    return $.ajax({ 
     url: '/ajax/get-details', 
     type: 'POST', 
     data: { 
      element_id: element_id 
     }, 
     dataType: 'json', 
     success: function (response:AjaxResponseInterface) { 
      // In here, the IDE will know the structure of `response` 
     } 
    }); 
} 

上記の作業は問題ありません。成功関数内でヒントAjaxResponseInterfaceを入力したので、自動補完などのメリットがあります。

しかし、我々はまた、私たちのコード内の周りの約束を渡して、代わりにsuccessdone機能を呼び出すことができます:活字体は何を知っているように、

let promise = ajax(123); 

promise.done(function (response) { 
    // In here, the IDE won't know that the response is of type `AjaxResponseInterface`, unless of course we type hint it again above 
}); 

はどのように機能ajaxの戻り値の型を変更することができますタイプ:responseオブジェクトはsuccessですか?

など。このような何か:

function ajax(element_id:number):JQueryPromise<AjaxResponseInterface>

目標は、私たちは周りの約束オブジェクトを渡すことができますし、我々はそれにpromise.done(function (response) {})を呼び出すときに、活字体が応答がタイプAjaxResponseInterfaceであることを知っているということです。

+1

'... 'の代わりに 'JQueryPromise 'を使うだけです。 – Bergi

+0

また、この関数自体が応答で面白いことをしない場合、 'success'関数を持つ必要はありません。また、この関数のすべての使用法が応答を少し変換する必要があることが判明した場合は、 '.then(response =>)'関数の結果を返すことで自分自身で行うことができます。 – Katana314

+0

@ Katana314私たちが達成しようとしていることを示すために 'success'コールバックを追加しました。 – Lionel

答えて

0

は、私たちが一緒にそれをすべて持っていたが判明:

function ajax(element_id:number):JQueryPromise<AjaxResponseInterface>は確かなソリューションです。

response.でCtrl + Spaceを押すと自動完成しないIDEだっただけです。しかし、responseのプロパティにアクセスしようとすると、AjaxResponseInterfaceに定義されていなかったため、TypeScriptは不平を言います。

関連する問題