Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 如何向DefinitelyTyped添加具有外部依赖关系的新类型?_Typescript_Definitelytyped - Fatal编程技术网

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

Typescript 如何向DefinitelyTyped添加具有外部依赖关系的新类型?,typescript,definitelytyped,Typescript,Definitelytyped,当DefinitelyTyped具有外部依赖项时,我很难理解如何将新类型添加到DefinitelyTyped。我无法通过测试,因为除非我将package.json添加到文件夹中,否则无法找到模块,但linter无法通过测试,因为包未被列入白名单 以下是拉取请求: 此外,在我的测试中,我还需要一些其他依赖项,以便实际使用它,但linter不允许使用devdependency 因此,在没有package.json的情况下,我在测试过程中遇到一个错误,即“模块未找到‘mob apollo’——这是

当DefinitelyTyped具有外部依赖项时,我很难理解如何将新类型添加到DefinitelyTyped。我无法通过测试,因为除非我将package.json添加到文件夹中,否则无法找到模块,但linter无法通过测试,因为包未被列入白名单

以下是拉取请求:

此外,在我的测试中,我还需要一些其他依赖项,以便实际使用它,但linter不允许使用devdependency

因此,在没有package.json的情况下,我在测试过程中遇到一个错误,即“模块未找到‘mob apollo’——这是有道理的

因此,我添加了一个package.json:

{
    "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"
    }
}