gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 21:08:23 27 4
gpt4 key购买 nike

当 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 期间遇到错误:

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

那我应该怎么办呢?

最佳答案

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

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

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

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

关于typescript - 如何向具有外部依赖项的 DefinitelyTyped 添加新类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47418587/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com