繁体   English   中英

使用声明命名空间覆盖 node_modules package 的类型

[英]Override typings of node_modules package with declare namespace

语境

最近,DefiniteTyped 的笑话类型已更新,将接口从Matchers<R>更改为Matchers<R,T> ,但 jest-extended 有自己的类型,并且尚未更新,导致 TypeScript 失败:

error TS2428: All declarations of 'Matchers' must have identical type parameters.

有一个PR ,但 repo 没有太多活动,所以可能需要一段时间才能合并。

我想在我的项目中覆盖它的类型,但是遵循这样的建议或这样建议不能正常工作。 在这种情况下,在 tsconfig 中使用paths似乎并不正确,因为 jest-extended 并不意味着每次都被导入,而是增加了全局 jest 声明。 该文件以

/// <reference types="jest" />

declare namespace jest {

并且没有importexport

我想要的是

我想覆盖jest-extended package 的类型并提供我自己的类型,而不打开skipLibCheck并消除错误。

我试过的

我正在使用这样的typeRoots

{
   // ...
   "typeRoots": ["./types/overrides", "node_modules/@types"],
}

我有文件types/overrides/jest-extended/index.d.ts和 jest-extended 声明的修改副本。 我认为 TS 正在读取该文件,因为我看到了一些更改的效果(例如,我将toReject(): R的返回类型更改为toReject(): Promise<R>并且 TSLint 现在对await-promise感到满意) .

但是......我仍然看到错误,因为文件node_modules/@types/jest/index.d.ts仍然由 TypeScript 加载。 我认为typeRoots中的目录顺序会使 TS 只捕获我自己的文件。 我无法卸载带有 npm 的类型,因为它们不在不同的 package 中。

如何在我的项目中完全覆盖类型?

这是对typeRoots的正确使用吗?

如何以更一般的方式处理这个问题? (不仅仅是开玩笑)

先感谢您!

您需要在 typeRoots 选项中明确指定 @types 目录的顺序。 例如,如果您有文件夹 «node_modules/@types» 和 «src/@types»,第一个应该是 «src/@types» 并指定排除。

"typeRoots": ["src/@types", "node_modules/@types"], 
"exclude": ["node_modules/jest-extended/types/*"]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM