node.js - 解决 Webpack + Typescript 中与 Node 依赖库的类型冲突

标签 node.js webpack typescript2.0

我正在构建一个依赖 PDFKit 的 Web 应用程序。 PDFKit 可以使用 Webpack 在浏览器中运行。由于我将 Typescript 与 Webpack 一起使用,因此我将 @types/node 包含在内定义,以便我与 PDFKit 的接口(interface)正常工作。

这会导致应用程序的其他部分使用浏览器全局变量(例如 Timer)或 Webpack 运行时全局变量(例如 require),其中类型与 Node 不同而引发错误。

有没有人有一个干净的方法来将 Node 类型隔离到需要的文件中?过去我已经根据需要分散了任何 - 例如:

(require as any).ensure(...); // require has no method 'ensure' in Node
let tmr: number = setTimeout(...) as any; // returns a 'Timer' in Node

这实在是丑陋且不可持续。有更好的办法吗?

最佳答案

作为解决方法,您可以禁用 require 从 Node 输入。

tsconfig.json 中显式设置 typeRoots。在这种情况下,@types 文件夹将不再用于查找类型。在自定义类型根中,您可以创建 index.d.ts 文件,其中///引用 @types 中的typyngs(node.d.ts 除外)。您还可以在自定义类型根目录中提供经过修改的自定义版本的 node.d.ts。

不是最佳解决方案。缺点很明显:您必须以某种方式维护引用和 Node 类型的自定义版本:)

(有关 typeRoots 的信息,请参阅 http://www.typescriptlang.org/docs/handbook/tsconfig-json.html )

更新:

在这里找到了另一个答案: https://github.com/DefinitelyTyped/DefinitelyTyped/issues/11324#issuecomment-265046822

您可以为每组文件创建单独的 tsconfig.json 文件,使用 Node 和不使用 Node 。您可以在此处明确选择要在组中应用的类型。 您仍然需要维护一组输入名称,但它要小得多。

关于node.js - 解决 Webpack + Typescript 中与 Node 依赖库的类型冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45023346/

相关文章:

node.js - 将 Angular 应用程序部署到 Heroku,构建成功但在浏览器中显示 404 not found

node.js - 开类 Node .js : do I need to load ssl certificates in the web console or in the application?

javascript - webpack-bundle-analyzer 显示 webpack -p 不删除开发依赖 react-dom.development.js

typescript - 整数(文字)联合类型,以 NaN 作为有效返回值

angular - 为什么我无法从 AutoMapper (TS) 导入并生成 Require 语句

node.js - 您如何从充当 nodejs 服务器的反向代理的 nginx 服务器提供静态文件?

javascript - 了解 Node.js 服务器目录结构和安全性

javascript - 在 webpack 的多个编译器配置中提取公共(public) block ?

webpack - bundle.js文件输出和webpack-dev-server

typescript - 错误 TS4058 : Return type of exported function has or is using name X from external module Y but cannot be named