57

到目前为止,我们习惯于tsd或(它的更好版本)类型

但是既然 TypeScript 2 提供了新@types功能,我应该如何将我当前的项目转换为使用 @types?

我有所有依赖项的 tsd.json(在某些情况下是 typings.json),迁移到 TypeScript 2 的步骤是什么?

有哪些的最佳实践?@types 是否支持特定版本?

4

4 回答 4

73

这很简单。只需通过 npm 安装您需要的定义。

例如,如果您需要 lodash,您可以执行以下操作:

npm install --save @types/lodash

安装后,您可以立即在项目中使用它。默认情况下,Typescript 将从node_modules/@types文件夹中解析已安装的 @types 包的类型。不再需要tsd.jsontypings.json文件。

附加点:

  • npm 中 @types 包的主要和次要版本应该与包的版本相对应。
  • 您可以在这里搜索类型:http ://microsoft.github.io/TypeSearch/
  • 阅读typeRootstypes这里。具体要注意这两点:
    • 如果typeRootstsconfig.json中指定,则只有指定的文件夹将用于类型根。这将排除./npm_modules/@types/除非您指定它。
    • 如果typestsconfig.json中指定,则仅包含指定的包。

在此处的博客文章中阅读更多信息。

于 2016-07-18T19:26:18.267 回答
40

Typescript 2.0摆脱了以前的Typings系统。
现在Typescript 2.0 应该默认查看./node_modules/@types并获取您作为单独节点模块安装的类型,例如npm install --save @types/react(如 @David Sherret 所述)

当前版本Typescript 2.0 beta中存在一个错误,它不会加载新类型。通过 cmd new tsc 手动编译文件,但是 VS 2015 中不支持 IntelliSense,并且 .ts 文件处于编辑模式时不会显示错误。

要解决它tsconfig.json,请使用类似的设置进行修改:

{
  "compilerOptions": {
     // ... other config rows 
   "typeRoots": [ "node_modules/@types/" ],
    "types": [ "jquery", "react", "react-dom", /*... your other types */ ],
  }
}

对我来说,手动"types"声明帮助解决了这个问题,其他人也有"typeRoots"帮助。希望它可以节省开发人员的时间。

于 2016-08-24T20:26:06.990 回答
4

看起来它们都只是 npm 包,你可以在这里找到所有支持的包。

tsc将选择node_modules文件夹中的任何类型。

您可以在package.json中移动您在typings.json中的依赖项(当然前提是您也更改了名称)。

您可以在此处阅读更多相关信息。

于 2016-07-18T19:25:17.067 回答
2

我应该如何将我当前的项目转换为使用@types

我绝对建议坚持一段时间。

例如,问题仍在修复中……就在 4 小时前:https ://github.com/Microsoft/TypeScript/issues/9725#issuecomment-233469422

于 2016-07-19T01:55:24.050 回答