2013-03-28 70 views
3

遇到了一個簡單的問題,這個問題在與打字稿相關的「這個」範圍內的類似問題中被提及。使用打字稿的草坪椅

我有一個存儲服務,爲我的本地存儲問題包裹lawnchair。現在我正在將這段代碼遷移到Typescript中,我遇到了一個我無法解決的問題。

public GetAll(callback: Function) { 
      Lawnchair({ name: this.storeName }, function() { 
       this.all(callback); 
      }); 
     }; 

現在在上面lawnchair的例子讓成爲你actioning實際的商店,但打字稿將使它成爲您使用的類的實例。那麼有沒有解決這個問題的方法?

==編輯==

更新的問題例如略,以不與底層lawnchair方法及周邊類方法混淆。

這裏是在編譯的時候我得到的錯誤:

屬性「所有」不上 類型的「LawnchairStorageService」

哪個是正確的,這種方法確實存在的價值不存在於包含的類實例中,它存在於lawnchair封閉範圍這個的上下文中。

+0

這是生成的代碼(運行時)的問題,還是TypeScript不理解'this'是什麼(編譯時間)?如果它是前者附加生成的代碼,並說出它有什麼問題是有幫助的。如果是後者將「這個」投射到你所知道的事情上,應該這樣做。 – 2013-03-28 15:20:05

+0

它是後者,打字稿編譯器拋出一個錯誤,我不認爲鑄造* this *會起作用,因爲它仍然是基礎類實例而不是lawnchair實例。我會盡快更新錯誤的問題! – Grofit 2013-03-28 15:25:05

+1

這是否工作:http://www.typescriptlang.org/Playground/#src=class%20Test%20%7B%0A%09public%20GetAll(callback%3A%20Function)%20%7B%0A%09%09return %20function%20(回調)%7B%0A%09%09Lawnchair(%7B%20name%3A%20this.storeName%20%7D%2C%20function%20()%20%7B%0A%20%20%20 %20%20%20%20%20%20%20%20%20%20%20%20%20this.all(回調)%3B%0A%20%20%20%20%20%20%20% 20%20%20%20%20%7D)%3B%0A%09%09%7D(回調)%3B%0A%09%09%7D%3B%0A%7D – JcFx 2013-03-28 15:46:24

回答

1

如上評論指出,這編譯,我覺得它應該運行:

public GetAll(callback: Function) { 
    return function (callback){ 
     Lawnchair({ name: this.storeName }, function() { 
      this.all(callback); 
     }); 
    }(callback); 
}; 

...但我懷疑別人或許可以用更優雅的解決方案來衡量。

+0

你可以有答案,因爲它的作品,如果有更好的解決方案出現,我會移動答案,但你會希望得到幾個upvotes兩種方式:) – Grofit 2013-03-28 16:09:08

+0

唉...你是一個學者*和*紳士。 – JcFx 2013-03-28 16:12:24

0

你有沒有試過如下:

public Exists(uniqueIdentifier: string, callback: Function) { 
      var me = this; 
      Lawnchair({ name: this.storeName }, function (me) { 
       me.exists(uniqueIdentifier, callback); 
      }); 
     }; 
+0

這是行不通的,因爲你的* me *變量將等於包含類的實例,而不是創建的lawnchair實例。所以你基本上是按照問題示例中所示的完全相同的邏輯,但採用更詳細的方式。 – Grofit 2013-03-28 14:44:34