javascript - 使用 TypeScript 声明 RequireJS 依赖
我正在使用带有 RequireJS 的 TypeScript。如您在下图中所见,我使用 RequireJS 配置定义了一些导入;当然,这些导入是通过 <script> 标签引入的:
TypeScript 看不到那些声明,所以我在考虑干脆把它们声明为全局变量之类的,以避免转译错误。在这种情况下,最好的做法可能是什么?一切似乎运行正常,但我确实会收到更多的编译错误,而且到处都是红色语法高亮。
在第一张图片中,我们看到 requirejs 未被识别,在下面的图片中我们看到 TypeScript 不知道 'redux' 是什么(但它在 RequireJS 配置中)。
所以我想做的是告诉 TypeScript 以下依赖项:requirejs、redux、react、rxjs、socketio 等
答案#1
所以问题的一部分是我需要运行:
npm install -D @types/requirejs
npm install -D @types/redux
然后在我的 tsconfig.json 中,添加:
"types": [
"node",
"lodash",
"react",
"react-dom",
"redux",
"react-redux",
"async",
"requirejs"
],
"typeRoots": [
"node_modules/@types"
],
但同时,为了解决 TypeScript 不理解前端 <script> 标签依赖来源的问题,看起来我们可以这样做:
https://weblog.west-wind.com/posts/2016/Sep/12/External-JavaScript-dependencies-in-Typescript-and-Angular-2
取消引用全局变量 为了让 TypeScript 编译器满意,避免出现编译错误,或者避免导入大量类型只使用一两次,有时自己管理外部库会更简单。可以使用常规的 script 标签导入,或者作为单独的供应商包的一部分打包,然后在主页面中直接引用。
所以,与其使用 import 来引入库,我们可以像过去一样使用 标签来引入:
然后在任何你想要使用这些库的 Typescript 类/组件中,通过使用 declare 显式地取消引用每个库的全局变量,并将它们强制转换为 any:
declare var redux:any;
declare var socketio: any;

