解决 npm 包提供的错误 index.d.ts 文件

Posted

技术标签:

【中文标题】解决 npm 包提供的错误 index.d.ts 文件【英文标题】:Working around a bad index.d.ts file provided by npm package 【发布时间】:2019-08-08 07:19:55 【问题描述】:

我最近遇到了一个 npm 包,它不是用 TypeScript 编写的,但确实提供了自己的 index.d.ts 文件。不幸的是,这些类型是不准确的,并且是由没有维护包的人贡献的。当我添加 /// <reference... 指令以指向我的固定类型时,VS Code 似乎不确定该怎么做,并告诉我给定对象有两种类型定义。在这未解决的情况下,我无法继续前进。除了在我的机器上编辑node_modules 中的文件之外,我还有什么办法可以开始工作?

如果这些类型由DefinitelyTyped 提供,这将很容易:我只需删除坏的,提交包含我的更改的PR,同时使用我的本地版本。因为这个index.d.ts 是库本身的一部分,所以我唯一的选择是克隆整个 repo,从那里开始工作,准备好后提交 PR,希望他们合并并快速发布新版本?这似乎不对。有没有办法告诉编译器忽略node_modules 中的特定 index.d.ts 文件,所以我的文件是唯一的?

【问题讨论】:

【参考方案1】:

compilerOptionstsconfig.json 文件中添加skipLibCheck: true。 这会禁用所有 *.d.ts 文件的类型检查。

标志在compiler options documentation中描述。

如果您确定您的代码是正确的,另一种选择是在出现错误的行上使用// @ts-ignore cmets 来忽略错误。

这里还有一个类似帖子的link,该帖子也提供了两种可能的解决方案。

【讨论】:

谢谢,但不是文件中存在类型错误,只是没有维护,因此完全不准确。参数错误、缺少函数/方法等…… 我明白了。如果添加此设置,代码仍应编译。类型检查意味着根据类型定义而不是定义文件检查您的代码。我还用另一个选项更新了答案,并提供了一个类似帖子的链接,该帖子提供了其他解决方法。 ***.com/a/50794250/2105069 的评论效果非常好。感谢您指出这一点!【参考方案2】:

@AlesD 在另一个答案的评论中链接的评论 here 完美地做到了这一点。在src 中,创建node_modules/problem-library/index.d.ts 并将更新的类型定义放在那里。它们将覆盖库提供的那些。

您的 .gitignore 可能会忽略您的文件,这不好。你可以修复 通过修改你的 .gitignore

node_modules/
!src/node_modules/

第一个是您对文件夹的现有排除,第二个添加了一个模式,该模式将否定它。

【讨论】:

以上是关于解决 npm 包提供的错误 index.d.ts 文件的主要内容,如果未能解决你的问题,请参考以下文章

类型 googlemaps index.d.ts 不是模块错误消息

获取TypeScript的声明文件.d.ts

如何在纱线包中创建 index.d.ts 文件?

如何在 index.d.ts 打字稿定义文件中引用 Redux 类型?

@Types/node/index.d.ts TypeScript 错误 TS2309

node_modules/@types/node/index.d.ts(20,1):错误 TS1084:无效的“参考”指令语法