在 Typescript 2.0 中使用 @types 类型定义

在 Typescript 2.0 中使用 @type 类型定义javascript

基于 Typescript 开发的时候,很麻烦的一个问题就是类型定义。致使在编译的时候,常常会看到一连串的找不到类型的提示。解决的方式通过了许多的变化,从 DefinitelyTypedtypings。最后是 @types。在 Typescript 2.0 以后,推荐使用 @types 方式。html

DefinitelyTyped

这个工具已经不被推荐,仅做介绍。java

多数来自 javascript 的库是没有 TypeScript 类型定义的。为了解决这个问题,DefinitelyTyped 被建立出来,它提供了多数流行的脚本库的 TypeScript 定义,你可使用名为 tsd 的一个工具来管理它。node

首先,你须要安装这个工具。react

npm install tsd -g

而后,可使用这个工具来安装你须要的定义库。好比 jquery 的定义库。jquery

tsd install jquery --save

 

若是提供了 --save 参数,它会建立一个名为 tsd.json 的配置文件来保存所管理的类型定义包。看起来以下所示。git

{
    "version": "v4",
    "repo": "DefinitelyTyped/DefinitelyTyped",
    "ref": "master",
    "path": "typings",
    "bundle": "typings/tsd.d.ts",
    "installed": {
        "node/node.d.ts": {
            "commit": "6834f97fb33561a3ad40695084da2b660efaee29"
        }
    }
}

 

之后,直接使用github

tsd install

 

就能够安装定义在配置文件中的全部的包了。typescript

Typings

这个也不推荐了。express

后来,咱们有了 Typings, 这是也是一个用来管理 Typescript 定义的库,你须要安装这个应用。

# Install Typings CLI utility.
npm install typings --global

 若是须要一个库的定义文件,好比 react

typings install react --save

 安装以后,在你的项目文件夹中会自动建立一个名为 typings 的文件夹来专门保存类型定义的库。

若是这个定义来自 DefinitelyTyped, 则现有加上一个参数 --ambient

typings install jquery --ambient  --save

它本身须要一个配置文件 typings.json,能够用它来管理项目使用到的类型定义,这样,相似于 NPM,咱们可使用 install 命令来自动安装须要的类型定义。

typings install

这个 typings.json 文件的内容示例以下。

{
  "ambientDependencies": {
    "jquery": "registry:dt/jquery#1.10.0+20161119044246"
  },
  "dependencies": {
    "react": "registry:npm/react#15.0.1+20160601175240"
  }
}

仍是须要专门的工具来管理类型系统。咱们可让这个问题更加简单一点。

@Types

使用另一套系统来管理类型定义显然不太方便。

在 Typescript 2.0 以后,TypeScript 将会默认的查看 ./node_modules/@types 文件夹,自动从这里来获取模块的类型定义,固然了,你须要独立安装这个类型定义。

好比,你但愿 core.js 的类型定义,那么,你须要安装这个库的定义库。

npm install --save @types/core-js

与咱们安装一个普通的库没有区别。固然了,经常使用的 jquery 也有。Microsoft 在 The Future of Declaration Files 介绍了 TypeScript 的这个新特性。

默认状况下,全部的 @types 包都会在编译时应用,任意层的 node_modules/@types 都会被使用,进一步说,在 ./node_modules/@types/,../node_modules/@types/../../node_modules/@types/ 都被应用。

若是你的类型定义不在这个文件夹中,可使用 typesRoot 来配置,只有在 typeRoots 中的包才会被包含,例如:

{
   "compilerOptions": {
       "typeRoots" : ["./typings"]
   }
}

如今,只有在 ./typings 中的才会应用,而 ./node_modules/@types 中的则不会。

若是配置了 types,则只有列出的包才会包含。

{
   "compilerOptions": {
       "types" : ["node", "lodash", "express"]
   }
}

这样将只会包含 ./node_modules/@types/node, ./node_modules/@types/lodash 和 ./node_modules/@types/express ,其它的则不会被包含进来。

若是配置为

"types": []

则不会包含任何包。

Reference

tsconfig.json

相关文章
相关标签/搜索