Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 打字脚本不是打字_Javascript_Reactjs_Typescript - Fatal编程技术网

Javascript 打字脚本不是打字

Javascript 打字脚本不是打字,javascript,reactjs,typescript,Javascript,Reactjs,Typescript,我试图从处于react状态的对象调用函数 //currentUser is of type User this.state.currentUser.rankUp() 但是它只给出了一个错误,this.state.currentUser.rankUp不是一个函数。如果我创建了一个新的用户对象,尽管它确实允许我调用所述函数。即使我尝试将其转换为user:var user:user=this.state.currentUser为user,然后调用该函数,也会出现相同的错误。我尝试打印类型,即使在强制

我试图从处于react状态的对象调用函数

//currentUser is of type User
this.state.currentUser.rankUp()
但是它只给出了一个错误,this.state.currentUser.rankUp不是一个函数。如果我创建了一个新的用户对象,尽管它确实允许我调用所述函数。即使我尝试将其转换为user:
var user:user=this.state.currentUser为user
,然后调用该函数,也会出现相同的错误。我尝试打印类型,即使在强制转换时,它也会以对象而不是用户的形式返回

到目前为止,我唯一能让它工作的方法是
user.rankUp=(新用户(“a”)).rankUp
虽然有效,但感觉不正确

编辑:

User.rankUp定义为:

rankUp(){
    this.rank +=1;
}
即使我尝试将其强制转换为user:var user:user=this.state.currentUser为user,然后调用该函数,也会出现相同的错误

TypeScript没有类型转换。它具有类型断言:

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

所以要回答你的问题:

打字脚本不是打字


因为没有类型转换。应该是this.state.currentUser.rankUp,()表示它是一个函数匹配。
因为它是一个提示,而不是一个转换,它只是告诉TS您知道值的类型(在本例中,您错了)。您的解决方案几乎是正确的,TypeScript不会在不更新实例的情况下将通用对象(例如,从JSON)转换为实例。但是你不必修补一件事,试试
user=newuser(user.whatever)。那么,
rankUp
是如何定义的呢?你能发布用户类吗?你需要发布更多的代码。我现在的假设是this.state.currentUser不是您所认为的。执行console.log(this.state.currentUser)并查看对象的原型。你确定是用户吗?我们需要查看更多代码以帮助您。