2014-01-15 18 views
7

typescriptとemberを併用するのが最も困難な時です。私はdefinitely typedのすべての定義ファイルを持っていて、サイト上のEmberガイドのToDoウォークスルーを行った。私はtypescriptにjsを変換しようとしていて、プロジェクトを設定する最善の方法は何かを見ていますが、私はtypescriptの定義をよく理解していないと思います。EmberjsとTypescript SetUp

私が行う場合:

/// <reference path="typings/ember.d.ts" /> 

var App = Ember.Application.create(); 

のAppは、「{}」のタイプであると私はガイドの次の行を行うには「ルータ」にアクセスすることはできません

App.Router.map(...) 

最高オンラインで見つけたものはthisで、現在のタイピングでは機能しません。

私はtypescript ember-app-kitを見たことがありますが、これはほとんどのタイスクリプトが含まれておらず、設定がまったくエベールガイドに似ていないので、本当に助けになりません。私はちょうど正しい方向に指摘する必要があります。みんなありがとう。

答えて

5

私はエンバーに慣れていないんだけど、ember.d.tsの検査から、私はそれが(作成見ることができますが)、オブジェクトの静的ジェネリック関数として定義されています

static create<T extends {}>(arguments?: {}): T; 

それでは、あなたはする必要があります実際の型渡すことによって、より優れたタイプの情報を取得することができ:しかし

var App = Ember.Application.create<Ember.Application>(); 

を、私は燃えさしのtypedefは、アプリケーションクラスの「ルータ」メンバーが含まれていないことも確認し、それがなかった場合でも、ルータークラスはmap()を定義しません。

// ./EmberExt.d.ts 
/// <reference path="typedef/ember/ember.d.ts" /> 

declare class RouterExt extends Ember.Router { 
    map: ItemIndexEnumerableCallbackTarget; 
} 

declare class ApplicationExt extends Ember.Application { 
    Router: RouterExt; 
} 

そして、私の組み合わせのルータ/アプリケーションファイルからという参照:

/// <reference path="typedef/ember/ember.d.ts" /> 
/// <reference path="./EmberExt.d.ts" /> 

var App = Ember.Application.create<ApplicationExt>(); 
App.Router.map(function() { 
    this.resource('todos', { path: '/' }); 
}); 

これを実行した後、それをコンパイルし、負荷のない私は、拡張型定義を作成することで動作するようにそれを得ることができましたエラーは、実際に何もしません(私はこのウォークスルーのこの段階では大丈夫だと思います)。

+0

返信ありがとうございます。私は、これらのタイプスクリプトクラスを拡張して失敗しないようにすることができると理解していますが、なぜ定義ファイルの最初の部分にまだ存在しなかったのか分かりません。 tsコードは別の構造であると考えられていますか? – Oak

+4

@ Oak-それは単に不完全である可能性が高いです。張力を生成するための正式なプロセスはないので、ボランティアは定義ファイルを作成します。私は定義ファイルを改善するために、例えばいくつかの他のライブラリに貢献しました。 – WiredPrairie