javascript - 在 React Typescript 项目中使用来自 JS lib 的窗口对象
问题描述
在 React 和 Typescript 中有一个全新的项目,我需要使用我的同事开发的 JS Lib。
使用 NPM 将 lib 打包并添加到项目中。min.js 的内容如下:
window.SharedObj=function(e){
...
}
因此,此库旨在在窗口范围内注册 SharedObj 的实例,我需要在我的顶级组件 (index.tsx) 中检索此实例。
我已经成功地这样做了:
require('path/lib.min.js');
// @ts-ignore
new SharedObj();
if ((window as any).SharedObj) {
ReactDOM.render(
<React.StrictMode>
<App/>
</React.StrictMode>,
document.getElementById('root')
);
}
这行得通,但我认为 ts-ignore 和 "as any" 来完成这项工作似乎是错误的。
你有更好的解决方案吗?我可以扩展 Window 定义吗?
解决方案
您可以将Window对象全局声明为作为SharedObj
其属性之一的接口。
declare global {
interface Window {
// you'll need to explicitly specify the
// type of arguments & function return type
SharedObj: (e: ArgsType) => ReturnType;
}
}
推荐阅读
- nativescript - NativeScript:过滤文件夹
- c# - 如果winform字段没有变化,如何停止计算点击事件的值
- html - 如何使用 Microdata 来表示 ItemPage 上的类似产品?
- google-sheets - 计算 2 列对(产品/库存)之间的差异
- vb.net - 当我不知道程序文件夹在哪里时,如何打开文本文件?
- swift - Swift Firestore 阻止检查 Dictionary 键是否存在
- javascript - 如何使用 topojson 访问数组中的值
- c# - Asp.net core Blazor 服务器端 3.0 中的中间件重定向错误?
- html - 如何仅在台式机/笔记本电脑上将 Rehub 主题中的主菜单居中?
- jmeter - 在 JMeter 中,如何在为 CSV 文件中的每个元素选择不同值的同时创建多个有效负载块?