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

How do I add a new type to DefinitelyTyped that has external dependencies?

我无法弄清楚如何在 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 期间遇到错误:

Error: In /home/travis/build/DefinitelyTyped/DefinitelyTyped/types/mobx-apollo/package.json: Dependency apollo-client not in whitelist; please make a pull request to types-publisher adding it.

但是,如果您查看白名单,它非常小,所以这不是解决此问题的正确方法...是吗?我想如果您必须为每个具有依赖性的包列入白名单,那么这个列表会很大。

https://github.com/Microsoft/types-publisher/blob/master/dependenciesWhitelist.txt

那我应该怎么办呢?

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

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

在这种情况下,提出一个 PR 添加 apollo-client 到白名单应该是完全有效的,因为它是用 TS 编写的,并且有自己的定义

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