Typescript 如何向DefinitelyTyped添加具有外部依赖关系的新类型?
当DefinitelyTyped具有外部依赖项时,我很难理解如何将新类型添加到DefinitelyTyped。我无法通过测试,因为除非我将package.json添加到文件夹中,否则无法找到模块,但linter无法通过测试,因为包未被列入白名单 以下是拉取请求: 此外,在我的测试中,我还需要一些其他依赖项,以便实际使用它,但linter不允许使用devdependency 因此,在没有package.json的情况下,我在测试过程中遇到一个错误,即“模块未找到‘mob apollo’——这是有道理的 因此,我添加了一个package.json:Typescript 如何向DefinitelyTyped添加具有外部依赖关系的新类型?,typescript,definitelytyped,Typescript,Definitelytyped,当DefinitelyTyped具有外部依赖项时,我很难理解如何将新类型添加到DefinitelyTyped。我无法通过测试,因为除非我将package.json添加到文件夹中,否则无法找到模块,但linter无法通过测试,因为包未被列入白名单 以下是拉取请求: 此外,在我的测试中,我还需要一些其他依赖项,以便实际使用它,但linter不允许使用devdependency 因此,在没有package.json的情况下,我在测试过程中遇到一个错误,即“模块未找到‘mob apollo’——这是
{
"private": true,
"dependencies": {
"apollo-client": "^2.0.0",
"graphql-tag": "^2.0.0",
"mobx": "^3.0.0"
}
}
现在我在过梁过程中得到一个错误:
错误:在
/home/travis/build/DefinitelyTyped/DefinitelyTyped/types/mobx-apollo/package.json:
依赖关系apollo客户端不在白名单中;请发出拉取请求
要添加它,请执行以下操作
然而,如果你看一下白名单,它是非常小的,所以这不是解决这个问题的正确方法…是吗?我想如果你必须为每个有依赖关系的包列出白名单,那么这个名单将是巨大的
那么我应该在这里做什么呢?外部包依赖项仅用于定义自己类型的包,其他所有依赖项都将由编译器直接从DT repo通过tsconfig.json中的
“typeroot”:[“./”]
,找到,这就是为什么白名单很短的原因——通常大多数仍然来自DT本身
在导入*.d.ts
和测试文件时,编译器只导入类型信息,而不生成JS,因此不需要实际的包,只需要定义-如果这些来自外部包,则该包是合法的依赖项,但仍然不会生成JS,这只是编译器测试
在这种情况下,向白名单中添加apollo client
的PR应该是完全有效的,因为它是在TS中编写的,并以自己的定义分发
关于其他依赖项,看起来它们只适用于测试用例,在测试用例中,您不仅要测试自己的包,还要在MobX的上下文中测试其集成,考虑到您还需要引入这些包(如果它们定义自己的类型-
MobX
),这可能有些过分了或者为其他没有自己的类型def或者已经在DT中的类型def(比如graphql标记
)编写新的def。您可以保持它的简单性,并将它们排除在测试用例之外,这也意味着您需要将它们保持最新,从而减少维护开销(而不是存在于DefinitelyTyped中)是的,因为它们通常是由TS本身的项目源生成的,它们往往比手写的备选方案更准确,波动性更小,并且总是最新的,因此比DT中的更可取,所以您应该没有问题获得一个包的白名单如果是这样的话
{
"private": true,
"dependencies": {
"apollo-client": "^2.0.0",
"graphql-tag": "^2.0.0",
"mobx": "^3.0.0"
}
}