Reactjs 类型脚本错误:属性';X';不存在于类型';窗口';
我已将TS添加到我的React/Redux应用程序中 我在我的应用程序中使用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(不起
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没能让它工作,也懒得跟进