在您提问之前:是的,我进行了搜索 - 并找到了 #6334 - 尽管这并没有解决我的问题。
我正在编写一个使用 Webpack 的 Web 应用程序。 因此,我确实需要在前端访问webpack-env.d.ts
,但我也有兴趣使用 Node 的url
模块(用于url.parse
)。 如果我在同一个引用文件中需要webpack-env.d.ts
和node.d.ts
,可以预见它会中断,因为 Node 重新定义了require
。 IOW,我需要访问node.d.ts
的url
模块和 webpack 的require
定义。
我可以通过使用const url: any = require('url')
来解决这个问题,虽然这并不理想,我想为这个模块打字。 另一种选择是将node.d.ts
拆分为其组成模块,并让主node.d.ts
需要每个单独的模块,尽管我不确定这是否会破坏依赖于此的许多人的任何东西TypeScript 声明文件 - 我并不特别想在本地将其破解。
有什么建议?
好吧,从技术上讲,您仍然不在 node 环境中,并且包含整个 node.d.ts 文件是不正确的。 您正在使用一个 npm 包,它的作用与节点的“url”相同,但在浏览器环境中。 您可以做的是从 node.d.ts 中提取这些类型并拥有一个单独的 url.d.ts,就像您已经建议的那样。 仅仅将 node.d.ts 拆分为更小的模块可能无法满足所有需求,因为签名可能因环境差异(缓冲区与数组)或实现而不同。 我建议为这个“url”包独立打字。
我遇到了同样的问题,我在tsconfig.json
使用 include typings/index.ts
tsconfig.json
来包含所有类型。 当同时添加webpack-env.d.ts
和node
,打字稿编译器显然会抱怨。 有没有解决的办法?
test_index.ts(1,28): error TS2339: Property 'context' does not exist on type 'NodeRequire'.
我“解决”它的方法是为我想要使用的特定于节点的模块创建一个单独的类型文件。 不幸的是,有点黑客。
我最终完全删除了 webpack-env,因为我只需要在我的整个项目中输入一个。 希望它保持这种状态。 我尝试了你的解决方案,但我真的不喜欢尽可能多地用引用污染我的文件。 谢谢回复
Saurabh Sharma / 质量工程
[email protected] / (925)-878-5722
雅默,微软
http://www.foklepoint.com
在2016年8月14日,在上午07点08分,丹[email protected]写道:
我“解决”它的方法是为我想要使用的特定于节点的模块创建一个单独的类型文件。 不幸的是,有点黑客。
—
您收到此消息是因为您发表了评论。
直接回复此邮件,在 GitHub 上查看,或将线程静音。
当然,我也不:( 但遗憾的是我需要那个模块。 @foklepoint
但是如果@types/node
是另一个依赖项的依赖项(例如fs-extra
、 jsdom
、 shelljs
、 tape
)呢?
也最终删除了webpack-env
和
if ((module as any).hot) {
...
😢
最有用的评论
但是如果
@types/node
是另一个依赖项的依赖项(例如fs-extra
、jsdom
、shelljs
、tape
)呢?也最终删除了
webpack-env
和😢