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

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

DefinitelyTyped

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

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

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

npm install tsd -g

然后,可以使用这个工具来安装你需要的定义库。比如 jquery 的定义库。

tsd install jquery --save

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

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

以后,直接使用

tsd install

就可以安装定义在配置文件中的所有的包了。

Typings

这个也不推荐了。

后来,我们有了 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

在 Typescript 2.0 中使用 @types 类型定义的更多相关文章

  1. IHostingEnvironment VS IHostEnvironment - .NET Core 3.0中的废弃类型

    原文: https://andrewlock.net/ihostingenvironment-vs-ihost-environment-obsolete-types-in-net-core-3/ 作者 ...

  2. C# 4.0中的动态类型和动态编程

    # 4.0的主题就是动态编程(Dynamic Programming).虽然C#仍然是一种静态语言,但是对象的意义开始变得越来越“动态”.它们的结构和行为无法通过静态类型来捕获,或者至少编译器在编译程 ...

  3. 避免在ASP.NET Core 3.0中为启动类注入服务

    本篇是如何升级到ASP.NET Core 3.0系列文章的第二篇. Part 1 - 将.NET Standard 2.0类库转换为.NET Core 3.0类库 Part 2 - IHostingE ...

  4. typescript 关于class属性类型定义被属性默认值覆盖的问题及解决方式

    问题来源于 React.component的第二个参数的类型定义问题,我构建了以下简化demo,方便描述问题: class P<STATE> { public state: STATE; ...

  5. 5种在TypeScript中使用的类型保护

    摘要:在本文中,回顾了TypeScript中几个最有用的类型保护,并通过几个例子来了解它们的实际应用. 本文分享自华为云社区<如何在TypeScript中使用类型保护>,作者:Ocean2 ...

  6. .net 4.0 中的特性总结(四):Tuple类型

    Tuple是具有指定数量和顺序的值的一种数据结构.针对这种数据结构,.Net4.0中提供了一组Tuple类型,具体如下: Tuple   Tuple<T>   Tuple<T1, T ...

  7. TypeScript 在vue中定义全局类型

    全局类型定义 路径 src/types/store.d.ts /** * 定义全局的State在 store.d.ts文件中 */ // 单独的state,导出为单独的module使用 export ...

  8. JavaScript 和 TypeScript 交叉口 —— 类型定义文件(*.d.ts)

    在 <从 JavaScript 到 TypeScript 系列> 文章我们已经学习了 TypeScript 相关的知识. TypeScript 的核心在于静态类型,我们在编写 TS 的时候 ...

  9. TypeScript 2.0 正式发布

    9 月 22 日,TypeScript 2.0 正式发布了. TypeScript 是微软开发的开源的编程语言,主要负责人是 C# 之父 Anders Hejlsberg. TypeScript 成功 ...

随机推荐

  1. 初识Linux—1

    1,Ctrl+C作用是终止当前的命令 2,ps显示目前正在执行的程序(命令)(process status) 3,退出是exit,连续按exit,最终会关闭终端 4,Root是管理员,其他的用户都是由 ...

  2. java封装性之private

    public class TestDemo{ public static void main(String args[]){ Person perA= new Person(); perA.setNa ...

  3. Web性能测试的简介

    一.术语 1.并发用户:并发一般分两种.1)严格意义上的并发,即所有的用户在同一时刻做同一件事情或操作,这种操作一般指做同一类型的业务:2)广义范围的并发,与前者主要区别,尽管多个用户对系统发出了请求 ...

  4. XML 增删查改

    <?xml version="1.0" encoding="utf-8"?> <users> <person name=" ...

  5. nodemon配置文件简单整理

    文件名称nodemon.json 内容如下: { "restartable":"rs",//重启的命令,默认是 rs "ignore":[& ...

  6. EntityFrameWork使用

    1.简单查询: SQL: ? 1 SELECT * FROM [Clients] WHERE Type=1 AND Deleted=0 ORDER BY ID EF: ? 1 2 3 4 5 6 7 ...

  7. 自动化运维:flask-bootstrap + highstock整合

    1.在flask-bootstrap的base.html模板中加载highstock.js      以下是base.html的源码中,调用js文件的例子. 文件路径:python2.7/site-p ...

  8. Python与PHP通过XMLRPC进行通信

    Python与PHP通过XMLRPC进行通信:服务器端用Python,客户端用PHP. 服务器端:xmlrpc_server.py #!/usr/bin/python # coding: UTF-8 ...

  9. HackerRank "Equal Stacks"

    Greedy - though simple, but fun! #include <vector> #include <iostream> using namespace s ...

  10. Mybatis原理分析之一:从JDBC到Mybatis

    1.引言 本文主要讲解JDBC怎么演变到Mybatis的渐变过程,重点讲解了为什么要将JDBC封装成Mybaits这样一个持久层框架.再而论述Mybatis作为一个数据持久层框架本身有待改进之处. 2 ...