2014-01-15 17 views
7

我最難得到打字稿和燼一起工作。我得到了definitely typed中的所有定義文件,並且我在網站上通過了Ember指南上的ToDo漫遊。我正在嘗試將js轉換爲打字稿,看看設置該項目的最佳方式是什麼,但我想我對打字稿的定義不甚瞭解。Emberjs和Typescript SetUp

如果我做的:

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

var App = Ember.Application.create(); 

應用程序是一種類型的「{}」,我不能訪問「路由器」做指導

App.Router.map(...) 

最好的下一行我在網上找到的東西是this,它不適用於當前的打字。

我見過打字稿的ember-app-kit,但它並沒有真正的幫助,因爲它幾乎不包含任何打字稿,它們的設置幾乎和餘燼指南差不多。我只需要指出正確的方向。多謝你們。

回答

5

我不熟悉與Ember,但是從檢查ember.d.ts,我可以看到創建()被定義爲靜態泛型函數的對象:

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

,那麼你應該能夠通過傳遞的實際類型,以獲得更好的類型信息:

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

但是,我也看到,餘燼類型定義不包括在應用程序類「路由器」的成員,即使它沒有,路由器類不定義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