如何向具有外部依赖项的 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';
在我的测试中,我还需要一些其他依赖项,以便我可以实际使用它,但是 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
)编写新的定义。您可以保持简单并将它们排除在测试用例之外,这也意味着您需要保持这些最新状态的维护开销更少
我无法弄清楚如何在 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 期间遇到错误:
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
)编写新的定义。您可以保持简单并将它们排除在测试用例之外,这也意味着您需要保持这些最新状态的维护开销更少