我应该如何在 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.json 或 typings.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?