我已将TS添加到我的React/Redux应用程序中。
我在我的应用程序中使用window
对象,如下所示:
componentDidMount() {
let FB = window.FB;
}
TS抛出一个错误:
类型脚本错误:类型“窗口”上不存在属性“FB”。TS2339
我想修正这个错误。
// Why doesn't this work? I have defined a type locally
type Window = {
FB: any
}
componentDidMount() {
let FB = window.FB;
}
// TypeScript error: Property 'FB' does not exist on type 'Window'. TS2339
我在这里找到了答案https://stackoverflow.com/a/56402425/1114926
declare const window: any;
componentDidMount() {
let FB = window.FB;
}
// No errors, works well
为什么第一个版本不起作用,而第二个版本起作用,尽管我根本没有指定FB属性?
您可以轻松地解决问题,而无需进行任何声明
window["FB"]
有几种方法可以解决这个问题:
例如:
1-)做一个演员:
(Windows as any).X
2)将以下代码放入文件react-app-env.d.ts
interface Window {
X?: {
Y?: {
.......
}
}
}
为什么声明const window:any
工作?
因为您声明了一个类型为
any
的局部变量。具有类型为any
的东西本质上关闭了窗口
的类型检查,因此您可以对其进行任何操作。我真的不推荐这个解决方案,这是一个非常糟糕的解决方案。
为什么
键入Window={FB:any}
不起作用?您可以定义一个类型窗口
。如果在模块中定义了该类型,则该类型与全局窗口
对象的类型无关,它只是模块内部称为窗口
的一种类型。
扩展
窗口的好方法
您必须扩展全局窗口
接口。您可以这样做:
declare global {
interface Window {
FB:any;
}
}
let FB = window.FB; // ok now
请注意,这个扩展将在您的整个项目中可用,而不仅仅是您定义它的文件。此外,如果
FB
有定义,您可以考虑键入它更好一点(FB:类型导入('FBOrWhateverModuleNameThishave')
)
获取错误:(类型窗口中不存在属性“MktoForms2”
我使用的是完全修补过的Visual Studio 2013。我正在尝试使用JQuery、JQueryUI和JSRender。我也在尝试使用打字。在ts文件中,我得到如下错误: 类型“{}”上不存在属性“fade div”。
不过,当我尝试使用firebase数据库时,我做了一个const来获取firebase数据库中的现有房间。get()在线:const roomRef=await database。ref()。get(); 它报告以下错误:D:/react/app/letmeask/src/pages/Home中的TypeScript错误。tsx(35,65):类型“Reference”上不存在属性“get”。TS
如果是window里面的parent定义类型好写,如果是定义parent里面的store类型,这种应该怎么写,我写了parent: parentInfo, 然后在parentInfo里定义store的类型,也不行 代码是这样写的:
问题内容: 我在下面的代码块上收到此错误。 我还发现了表明存在功能的链接。 http://definitelytyped.org/docs/typescript-services-- typescriptServices/classes/typescript.stringutilities.html 我会错过一些文件吗? 问题答案: 是ES6函数,因此您需要以TypeScript编译器设置为目标,
错误: 类型{儿童:字符串;严重性:字符串;sx:{宽度:字符串; }; }' 不能分配给类型'Intrinsic属性 警报组件 使用警报组件