Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.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
Reactjs 财产';组件堆栈';不存在于类型';字符串';。ts_Reactjs_Typescript_Typescript Generics - Fatal编程技术网

Reactjs 财产';组件堆栈';不存在于类型';字符串';。ts

Reactjs 财产';组件堆栈';不存在于类型';字符串';。ts,reactjs,typescript,typescript-generics,Reactjs,Typescript,Typescript Generics,我正在使用Typescript和React实现一个ErrorBoundary TSLint显示错误类型“string”上不存在属性“componentStack” 这是我的代码实现 interface-IState{ 信息:错误信息; } 公共国家={ 错误信息:“”, }; 公共组件DIDCATCH(错误:错误,错误信息:错误信息){ 这是我的国家({ 错误信息 }); } 公共渲染(){ if(this.state.errorInfo){ 返回( {this.state.errorInfo

我正在使用Typescript和React实现一个ErrorBoundary

TSLint显示错误
类型“string”上不存在属性“componentStack”

这是我的代码实现

interface-IState{
信息:错误信息;
}
公共国家={
错误信息:“”,
};
公共组件DIDCATCH(错误:错误,错误信息:错误信息){
这是我的国家({
错误信息
});
}
公共渲染(){
if(this.state.errorInfo){
返回(

{this.state.errorInfo.componentStack}

); } }
您在此处将
errorInfo
隐式声明为字符串:

public state = {
    errorInfo: "",
};
因此,要键入脚本,存储在
errorInfo
中的内容是一个
字符串<代码>组件堆栈
不能存在于
字符串中
这就是为什么会出现错误

您应该声明如下内容:

public state: {
   errorInfo: string | { componentStack: Function, },
} = {
    errorInfo: "",
};
并完成
state
对象内部内容的描述

如果您不知道,也可以使用
any

public state: any = {
    errorInfo: "",
};
无论如何,您应该在调用它之前测试
componentStack
是否存在,以防
errorInfo
确实是一个空的
字符串

if (this.state.errorInfo && typeof this.state.errorInfo.componentStack === 'Function') {
    {this.state.errorInfo.componentStack}
}

我将状态更改为
js public state={errorInfo:{componentStack:Function},}正如您所说的
jsx`{this.state.errorInfo&&this.state.errorInfo.componentStack}

,非常感谢:)