Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.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 类型脚本错误:属性';X';不存在于类型';窗口';_Reactjs_Typescript_Create React App - Fatal编程技术网

Reactjs 类型脚本错误:属性';X';不存在于类型';窗口';

Reactjs 类型脚本错误:属性';X';不存在于类型';窗口';,reactjs,typescript,create-react-app,Reactjs,Typescript,Create React App,我已将TS添加到我的React/Redux应用程序中 我在我的应用程序中使用window对象,如下所示: componentDidMount() { let FB = window.FB; } declare global { interface Window { FB:any; } } let FB = window.FB; // ok now TS抛出一个错误: 类型脚本错误:类型“窗口”上不存在属性“FB”。TS2339 我想修正这个错误 1(不起

我已将TS添加到我的React/Redux应用程序中

我在我的应用程序中使用
window
对象,如下所示:

componentDidMount() {
  let FB = window.FB;
}
declare global {
    interface Window {
        FB:any;
    }
}

let FB = window.FB; // ok now
TS抛出一个错误:

类型脚本错误:类型“窗口”上不存在属性“FB”。TS2339

我想修正这个错误

1(不起作用) 2(修复错误) 我在这里找到了答案


为什么第一个版本不起作用,而第二个版本起作用,即使我根本没有指定FB属性?

为什么
声明const window:any工作?

因为您声明了类型为
any
的局部变量。拥有类型为
any
的东西基本上会关闭
窗口的类型检查,因此您可以对它执行任何操作。我真的不推荐这个解决方案,它是一个非常糟糕的解决方案

为什么
键入Window={FB:any}
不起作用?
您可以定义一个类型
窗口
。如果在模块中定义了该类型,则该类型与全局
窗口
对象的类型无关,它只是模块内部称为
窗口
的一种类型

好的解决方案 要扩展
窗口
,必须扩展全局
窗口
界面。您可以这样做:

componentDidMount() {
  let FB = window.FB;
}
declare global {
    interface Window {
        FB:any;
    }
}

let FB = window.FB; // ok now

请注意,此扩展名将在整个项目中可用,而不仅仅是在其中定义它的文件中可用。此外,如果<代码> fb具有定义,您可以考虑将其键入一点(<代码> fb:Type of Expple('fbutnEclipse MultEngEdithIsIsAs'))

您使用模块吗?答案有点不同,这取决于我使用的反应组件。以上所有行为都来自React组件。它们可能被称为某种类型的模块,因为它们包含逻辑。您的“良好解决方案”未编译。“属性FB不存在于类型window&类型globalThis”@jDiskione是的,如果您的文件不是模块,请删除“声明全局”为什么此答案未标记为答案?我花了很长时间寻找一种从控制台/外部JS访问反应状态函数的方法,这是唯一一种在TS和JS中编译的方法worked@Beerswiller因为OP没能让它工作,也懒得跟进