2017-08-17 104 views
-1

我試圖從一個物體在我的反應狀態打字稿不是類型轉換

//currentUser is of type User 
this.state.currentUser.rankUp() 

調用一個函數,但它只是給出了一個錯誤this.state.currentUser.rankUp is not a function。如果我創建了一個新的用戶對象,但它確實讓我調用了所說的函數。即使我嘗試將它作爲用戶投射:var user:User = this.state.currentUser as User然後調用該函數,它會給出相同的錯誤。鑄造它時,它會返回作爲對象沒有用戶

我已經成功地得到它的工作至今感覺就像它的不正確,即使它的工作的唯一辦法是user.rankUp = (new User("a")).rankUp;我試圖打印類型,均勻。

編輯:

User.rankUp定義爲:

rankUp(){ 
    this.rank +=1; 
} 
+0

應該是this.state.currentUser.rankUp,()表示它是一個函數隊友。 – TGarrett

+1

'作爲'是一個提示,而不是一個轉換,它只是告訴TS你知道值的類型是什麼(在這種情況下,你錯了)。您所擁有的解決方案几乎是正確的,TypeScript不會將通用對象(例如來自JSON)轉換爲實例,而無需將其更新。但是你不必修補一件事,試試'user = new User(user.whatever);'而不是。 – jonrsharpe

+0

那麼,如何定義'rankUp'? – Amy

回答

0

即使我嘗試鑄造它作爲用戶的:var用戶:用戶= this.state.currentUser作爲用戶然後調用它給出相同錯誤的函數。

TypeScript沒有類型轉換。它有類型斷言:https://basarat.gitbooks.io/typescript/docs/types/type-assertion.html

它不被稱爲「類型轉換」的原因是轉換通常意味着某種運行時支持。然而,類型斷言純粹是一種編譯時構造,也是一種向編譯器提供有關如何分析代碼的提示的方式。

因此,要回答你的問題:

打字稿沒有類型轉換

因爲沒有類型轉換。