如何向具有外部依赖关系的DefinitelyTyped添加新类型?

时间:2017-11-21 16:58:19

标签: typescript definitelytyped

我在查找具有外部依赖关系时如何向DefinitelyTyped添加新类型时遇到问题。我无法通过测试,因为除非我将package.json添加到文件夹中,否则无法找到模块,但是由于软件包未列入白名单,因此linter不会通过。

这是拉取请求:

https://github.com/DefinitelyTyped/DefinitelyTyped/pull/21581

// index.d.ts

import {
     ApolloClient,
     ObservableQuery,
     WatchQueryOptions,
     ApolloError
} from 'apollo-client';

https://github.com/DefinitelyTyped/DefinitelyTyped/pull/21581/files#diff-bedcd6706b6ae7a6f6df5951737dcc31R12

同样在我的测试中,还有一些我需要的依赖项,以便我可以实际使用它,但是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

那我该怎么办?

1 个答案:

答案 0 :(得分:2)

只有定义自己类型的包需要外部包依赖性,编译器可以通过tsconfig.json中的"typeRoots": ["../"]直接从DT repo找到所有其他依赖项,这就是白名单短缺的原因。一般大部分仍然来自DT本身。

*.d.ts和测试文件中导入时,编译器只导入类型信息而不是生成JS,因此不需要实际的包,只需要定义 - 如果这些是来自外部包,那么package是一个合法的依赖项,但仍然没有生成JS,它只是一个编译器测试

在这种情况下,将apollo-client添加到白名单中的PR应该完全有效,因为它是用TS编写的,并且使用自己的定义进行分发

关于其他依赖项,看起来它们仅适用于测试用例,在这种测试用例中,您不仅要测试自己的软件包,还要在MobX的上下文中测试它的集成,考虑到您还需要它,这可能是过度的引入这些包(如果他们定义自己的类型 - mobx)或为没有自己的类型def或已经在DT中的其他类型(如graphql-tag)编写新的defs。您可以保持简单并将其保留在测试用例之外,这也意味着您需要保持最新的维护开销