2017-08-17 106 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

它不被称为“类型转换”的原因是转换通常意味着某种运行时支持。然而,类型断言纯粹是一种编译时构造,也是一种向编译器提供有关如何分析代码的提示的方式。

因此,要回答你的问题:

打字稿没有类型转换

因为没有类型转换。