在npm @types组织的包中使用TypeScript类型定义

170

我注意到有一个npm组织@types,其中包含类型定义包,但找不到任何文档说明如何使用它们。

这些是用来配合typings工具使用的吗?如果是,如何安装它们?例如,有一个@types/openlayers包,但是typings search npm:openlayers返回无结果。

还是说它是独立于typings工具使用的?例如,可以直接使用npm进行安装吗?


20
感谢您提出这个问题。 - Léon Pelletier
3个回答

126
自 TypeScript 2.0 起,不再需要使用“typings”。npm 组织是一个设立开发者团队的实体。我相信 Microsoft 在 npm 中设立了 @types 组织,并将 TypeScript 开发团队添加到了该组织中。@types 组织下的包是通过 types-publisher 工具从 DefinitelyTyped 自动发布的,详情请参见文档
此外,还有另一种方法可以为您的包添加类型: 在 package.json 中 如果您的包有一个主要的 .js 文件,则还需要在 package.json 文件中指定主声明文件。将 types 属性设置为指向捆绑的声明文件。例如:
{
    "name": "awesome",
    "author": "Vandelay Industries",
    "version": "1.0.0",
    "main": "./lib/main.js",
    "types": "./lib/main.d.ts"
}

请注意,"typings"字段与"types"是同义词,也可以使用。
此外,请注意,如果您的主声明文件命名为index.d.ts并位于包的根目录(旁边是index.js),则不需要标记"types"属性,但建议这样做。
关于搜索类型:
大多数情况下,类型声明包的名称应始终与npm上的软件包名称相同,但前缀为@types/。如果需要,您可以查看https://aka.ms/types以找到您最喜欢的库的软件包。
来自 - http://www.typescriptlang.org/docs/handbook/declaration-files/consumption.html 但当我执行npm search @types/openlayers时,没有返回任何结果。但从Web界面进行搜索确实返回了结果。因此,我想npm search不会跨组织搜索。

很棒的回答!做一些小改动会更好,但这个解释当前情况的工作做得很出色。 - Ronald Zarīts
由于您在“package.json”文件中的“types”属性中指定了单个文件,我注意到您正在谈论捆绑声明文件。在像gulp这样的自动化构建系统中实现最简单的方法是什么? - Nicky
如果主文件名为index.js,我是否需要添加“main”字段? - Knu
2
非常感谢您的这个提示:“请注意,“typings”字段与“types”是同义词,也可以使用。” - Serhii Popov

45

在TypeScript博客上的公告回答了这个问题:声明文件的未来

摘要:

@types npm组织用于通过npm获取类型定义。在TypeScript 2.0中,使用这些类型定义将成为一项功能。

这将取代当前的项目/工具,如typingstsd,但是这些项目/工具将在一段时间内继续得到支持。


1
嗨Ron,我正在尝试设置这些内容,但似乎VSCode没有意识到我已经安装了它们。在使用npm i @types/core-js --save之类的东西后,我可以看到它在文件夹中,但项目仍然会出现错误。我还需要做些什么吗?我需要让tsconfig知道@types或其他什么吗?就像Sean说的那样,目前还没有关于类型的文档:( - Mark Pieszak - Trilon.io
@MarkPieszak 你必须确保 VSCode 正在使用 TS2.0。请参阅此处有关本地安装 TypeScript 并在 VSCode 中使用它的说明:https://github.com/Microsoft/TypeScript/wiki/Nightly-drops - nino.porcino
没错,就是这样 @nino.porcino 谢谢 :) tsdk 需要指向一个 2.0beta 版本的 TS 安装。 - Mark Pieszak - Trilon.io
至少对于一些团队项目,我们正在更新(以及在其他 GH 项目中看到),应该还要更新 tsconfig.json 文件,并添加一个 "types" 数组属性,列出这些模块名称,例如 "types": ["core-js"] - superjos

10

这将是Typescript 2.0中推出的一个功能。它为UMD模块/库及其相应定义提供类型支持。

请参见(内置对UMD模块定义的支持)以更好地理解目前与环境类型有关的问题。


谢谢!这很有用,但我没有看到GitHub问题讨论@types npm org。@types组织是否专门针对UMD /// <reference场景?TypeScript编译器会自动查找node_modules/@types下的类型(当'moduleResolution': 'node'时它会查找node_modules中的模块)?这对于typings意味着什么-它也处理环境依赖关系。它与之相关吗? - Ronald Zarīts

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接