我在查找具有外部依赖关系时如何向DefinitelyTyped添加新类型时遇到问题。我无法通过测试,因为除非我将package.json添加到文件夹中,否则无法找到模块,但是由于软件包未列入白名单,因此linter不会通过。
这是拉取请求:
https://github.com/DefinitelyTyped/DefinitelyTyped/pull/21581
// index.d.ts
import {
ApolloClient,
ObservableQuery,
WatchQueryOptions,
ApolloError
} from 'apollo-client';
同样在我的测试中,还有一些我需要的依赖项,以便我可以实际使用它,但是linter不允许使用devDependencies。
因此,如果没有package.json,我会在测试过程中收到错误消息,说明"模块未找到' mob-apollo' - 这是有道理的。
所以我添加了一个package.json:
{
"private": true,
"dependencies": {
"apollo-client": "^2.0.0",
"graphql-tag": "^2.0.0",
"mobx": "^3.0.0"
}
}
现在我在linter期间收到错误:
错误:在 /home/travis/build/DefinitelyTyped/DefinitelyTyped/types/mobx-apollo/package.json: 依赖关系apollo-client不在白名单中;请提出拉动请求 添加它的类型发布者。
但是,如果你看一下白名单,它很小,所以这不是解决这个问题的正确方法......是吗?我想象一下,如果你必须为每个有依赖关系的软件包列入白名单,那么这个列表就会很大。
https://github.com/Microsoft/types-publisher/blob/master/dependenciesWhitelist.txt
那我该怎么办?
答案 0 :(得分:2)
只有定义自己类型的包需要外部包依赖性,编译器可以通过tsconfig.json中的"typeRoots": ["../"]
直接从DT repo找到所有其他依赖项,这就是白名单短缺的原因。一般大部分仍然来自DT本身。
在*.d.ts
和测试文件中导入时,编译器只导入类型信息而不是生成JS,因此不需要实际的包,只需要定义 - 如果这些是来自外部包,那么package是一个合法的依赖项,但仍然没有生成JS,它只是一个编译器测试
在这种情况下,将apollo-client
添加到白名单中的PR应该完全有效,因为它是用TS编写的,并且使用自己的定义进行分发
关于其他依赖项,看起来它们仅适用于测试用例,在这种测试用例中,您不仅要测试自己的软件包,还要在MobX的上下文中测试它的集成,考虑到您还需要它,这可能是过度的引入这些包(如果他们定义自己的类型 - mobx
)或为没有自己的类型def或已经在DT中的其他类型(如graphql-tag
)编写新的defs。您可以保持简单并将其保留在测试用例之外,这也意味着您需要保持最新的维护开销