Typescript 2.0tsconfig.json中的“类型”字段问题如何解决?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (49)

我不明白types字段中的意思tsconfig.json。在文档中我读过这样的文字:

        "types": {
          "description": "Type declaration files to be included in compilation. Requires TypeScript version 2.0 or later.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },

到目前为止,据我了解,如果我安装,@types/express我应该添加这样的字符串tsconfig.json

{
  "compilerOptions": {
     ...
     "types": ["lodash"]
   }
} 

但没有它,一切正常。而现在我不明白,为什么我需要types场地

提问于
用户回答回答于

从TypeScript 2. *'tsconfig.json'具有以下两个可用属性:

{
    'typeRoots': [],
    'types': [] 
}

我会按顺序详细说明。

  1. 'typeRoots'指定转译器应该在其中查找类型定义的根文件夹(例如:'node_modules')。
    • 如果您使用的是打字稿,那么您知道,对于尚未使用打字稿编写的不同库,您需要定义以便编译器识别全局变量并具有智能感知支持。
    • 此问题已通过项目(回购)如“DefinatelyTyped”使用工具,如解决TSD分型模块下载为您的项目需要分型,而且还配备了一个需要单独维护自己的“JSON”文件。
    • 有了TS2。*你现在可以使用'npm'获取定义依赖关系。因此,而不是使用一个单独的CLI库像TSD分型,现在你只需使用: npm i @types/{LIB} 这样一来,所有依赖使用管理的package.json,你可以很容易地消除别人的JSON“文件的必要性,在您的项目维护。

  2. 'types'是将在typeRoot中找到的实际库名称。
    • 所以假设你有typeRoots的默认配置,它看起来像这样: "typeRoots": [ "./node_modules/@types" ]
    • 假设您现在想使用茉莉花作为您项目的测试框架,因此您已经配置了typeRoot文件夹,现在您所做的所有操作都是执行:npm i @types/jasmine --save-dev
    • 在定义软件包安装完成之后,你只需要在'tsconfig.json'中配置你的'types'属性,如下所示: "types": [ "core-js", "jasmine", "requirejs", "chance" ]

总之,基本上你告诉TS编译器如下:

typeRoots:需要在这些文件夹中查找类型。 类型:在上面提供的其中一个文件夹中,可以找到这些framworks(子文件夹)的定义。

因此,使用上面的场景,如果我们添加另一个根:

"typeRoots": [
    "./node_modules/@types",
    "./custom_definitions"
],
"types": [
    "jasmine",
]

TS现在将查找定义文件

./node_modules/@types/jasmine

要么

./custom_definitions/jasmine

用户回答回答于

你不需要类型字段。以下是从文档中注意的重要部分:

默认情况下,所有可见的“@types”包都包含在编译中。任何封闭文件夹的node_modules / @类型中的包都被视为可见

因此,如果已遵循约定或使用npm等工具集下载@types包,则无需在配置中配置typeRoot类型,因为它可以使用默认文件夹结构即可使用。

扫码关注云+社区