【问题标题】:Working around a bad index.d.ts file provided by npm package解决 npm 包提供的错误 index.d.ts 文件
【发布时间】: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 文件,所以我的文件是唯一的?

【问题讨论】:

    标签: typescript definitelytyped


    【解决方案1】:

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

    标志在compiler options documentation中描述。

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

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

    【讨论】:

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

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

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

    node_modules/
    !src/node_modules/
    

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

    【讨论】:

      猜你喜欢
      • 2022-11-11
      • 2018-11-28
      • 2020-01-19
      • 2021-08-04
      • 2022-01-01
      • 2019-07-05
      • 2017-08-18
      • 1970-01-01
      • 2018-05-22
      相关资源
      最近更新 更多