【问题标题】:How do I add a new type to DefinitelyTyped that has external dependencies?如何将新类型添加到具有外部依赖项的DefinitelyTyped?
【发布时间】:2018-05-05 05:46:42
【问题描述】:

当它具有外部依赖项时,我无法弄清楚如何将新类型添加到肯定类型。我无法通过测试,因为无法找到模块,除非我将 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 不在白名单中;请提出拉取请求 向 types-publisher 添加它。

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

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

那我该怎么办呢?

【问题讨论】:

    标签: typescript definitelytyped


    【解决方案1】:

    只有定义了自己类型的包才需要外部包依赖项,所有其他包都将由编译器通过 tsconfig.json 中的"typeRoots": ["../"] 直接从 DT 存储库中找到,这就是白名单简短的原因 - 通常大多数情况下仍然来自DT本身。

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

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

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

    【讨论】:

    • 是否应该将任何定义了自己的类型(而不是存在于definitelyTyped中)并且需要作为依赖项的包添加到白名单中?
    • 是的,因为它们通常是由 TS 本身的项目源生成的,它们往往比手写替代品更准确,更不易变,并且始终是最新的,所以更可取对于那些在 DT 中的人,所以如果是这种情况,你应该不会将包列入白名单
    猜你喜欢
    • 1970-01-01
    • 2014-03-04
    • 2018-09-14
    • 2021-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-07
    • 2018-02-04
    相关资源
    最近更新 更多