如何将打字稿定义文件添加到 npm 包中?

Posted

技术标签:

【中文标题】如何将打字稿定义文件添加到 npm 包中?【英文标题】:How to add a typescript definition file to a npm package? 【发布时间】:2016-09-09 15:41:49 【问题描述】:

有没有办法将打字稿定义(.d.ts 文件)直接添加到纯 javascript 项目中(例如在package.json 中)。我找不到任何相关文档。

【问题讨论】:

有趣的问题 :) 我会跟着。 【参考方案1】:

TypeScript Handbook 中有一个页面介绍了向 NPM 包添加类型。我将复制并粘贴到这里:

NPM 包的类型

TypeScript 编译器通过遵循 Node.js 模块解析算法来解析 Node 模块名称。 TypeScript 还可以加载与 npm 包捆绑在一起的类型。编译器将尝试使用以下规则集发现模块“foo”的类型:

尝试加载位于相应包文件夹 (node_modules/foo/) 中的 package.json 文件。如果存在,请阅读“类型”字段中描述的类型文件的路径。例如,在以下 package.json 中,编译器将解析 node_modules/foo/lib/foo.d.ts 处的类型


    "name": "foo",
    "author": "Vandelay Industries",
    "version": "1.0.0",
    "main": "./lib/foo.js",
    "typings": "./lib/foo.d.ts"

尝试加载位于包文件夹 (node_modules/foo/) 中的名为 index.d.ts 的文件 - 该文件应包含包的类型。

模块解析的精确算法可以在这里找到。

你的定义文件应该

be.d.ts 文件
写成外部模块 不包含三斜杠引用

基本原理是打字不应该将新的可编译项带入已编译文件的集合中;否则,包中的实际实现文件可能会在编译期间被覆盖。此外,加载类型不应污染全局范围,因为从同一库的不同版本中引入可能存在冲突的条目。

【讨论】:

似乎应该是types 而不是typings 我回答问题时是typings。这是archive。另外,从当前文档中:Note that the "typings" field is synonymous with "types", and could be used as well. 感谢您的背景故事。当前所有在线示例都使用types。如果您还没有,请考虑更新您的答案。 很好的宋飞参考。 我没有将字段从“typings”更改为“types”,因为当前文档说它们是同义词。我们有另一个使用“类型”的答案。我更喜欢有两个都有效的不同答案,而不是两个被编辑为相同的答案。【参考方案2】:

Visual Studio 2015 将无法识别定义文件,除非您使用 package.json 中的 types 属性https://www.typescriptlang.org/docs/handbook/declaration-files/publishing.html


   "name": "awesome",
   "author": "Vandelay Industries",
   "version": "1.0.0",
   "main": "./lib/main.js",
   "types": "./lib/main.d.ts"

*您必须在 ts 文件中使用三个斜杠来包含引用路径。/// <reference path="../node_modules/../lib/main.d.ts" />


对于其他登陆这里并希望将类型链接到他们的 npm 包的人,一个方便的 tutorial 可能会有所帮助!

【讨论】:

来自您提供的链接:Note that the "typings" field is synonymous with "types", and could be used as well.

以上是关于如何将打字稿定义文件添加到 npm 包中?的主要内容,如果未能解决你的问题,请参考以下文章

如何在打字稿中将类型本地添加到无类型的 npm 模块?

Angular:如何手动将打字文件添加到打字稿

如何将点击事件添加到打字稿中动态添加的html元素

如何使用 npm 命令编译打字稿?

如何将打字稿添加到现有的 vue3 项目?

如何在打字稿中定义敲除绑定处理程序?