我应该如何在 TypeScript 2 中使用@types

Posted

技术标签:

【中文标题】我应该如何在 TypeScript 2 中使用@types【英文标题】:How should I use @types with TypeScript 2 【发布时间】:2016-11-21 12:10:31 【问题描述】:

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

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

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

最佳实践是什么? @types 是否支持特定版本?

【问题讨论】:

【参考方案1】:

看起来都是npm包,你可以找到所有支持的here。

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

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

您可以阅读更多关于 here 的信息。

【讨论】:

【参考方案2】:

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

例如,如果您需要 lodash,您可以这样做:

npm install --save @types/lodash

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

补充要点:

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

阅读博文here了解更多信息。

【讨论】:

dt~*** 语法呢? @Royi 我从未见过@types 的语法——仅适用于typings。我认为绝对类型的定义是published automatically to @types。你有更多关于这方面的信息吗? 已经找到了。 Here you go. 是的,我不知道自 2 以来语法发生了变化。(IIUC) 谢谢 - 花了这么多时间搞砸“打字”。【参考方案3】:

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

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

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

【讨论】:

【参考方案4】:

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" 帮助。希望它可以节省开发人员的时间。

【讨论】:

"typeRoots" 为我工作,谢谢!根本问题是我的 tsconfig.json 文件在我的项目子文件夹中。所以我加了:"typeRoots": [ "../node_modules/@types/" ] 上述问题已修复,现在 typescript 直接从 ./node_modules/@types 加载新类型

以上是关于我应该如何在 TypeScript 2 中使用@types的主要内容,如果未能解决你的问题,请参考以下文章

(如何)我应该在 Vue.js 组件(TypeScript)中使用访问修饰符(公共、私有等)吗?

T | 如何将三万行代码从 Flow 移植到 TypeScript?

在Typescript中扩展泛型参数

Inferno + TypeScript 同构应用

如何在 Angular 2 / Typescript 中声明全局变量? [关闭]

如何使用 Angular 2 / Typescript 限制输入字段中的特殊字符