npm 包的可安装 typescript 类型定义

Posted

技术标签:

【中文标题】npm 包的可安装 typescript 类型定义【英文标题】:Installable typescript type definitions for an npm package 【发布时间】:2018-08-24 08:55:10 【问题描述】:

打字是 Typescript 的最佳功能之一,我发现它非常有用,可以在整个 javascript 项目中采用它,但是没有记录使用和最佳实践的效率,这给开发人员带来了很多困惑。

例如,我的 npm 包名为 my-awesome-pkg,对于这个包,我们有兴趣使用 @typings,用户可以使用 npm npm install @types/my-awesome-pkg 安装它

我知道如何在tsconfig.json 中使用includefiles 在您的项目中包含和使用@typings:

"include": [ "< path to your typing file>" ]

但这不是我想要的,我很想知道如何为我的项目创建可安装的@typings,这样用户就不会因为寻找我的 npm 包的类型而感到沮丧,因为假设有这样做的标准做法。

谢谢,

【问题讨论】:

如果您为自己的包编写定义,最好将它们与您的包捆绑在一起,而不是贡献给@types。见the relevant section at DefinitelyTyped。 【参考方案1】:

因此,如果您的项目是用 TypeScript 编写的,您只需在项目的 tsconfig.json 中设置以下标志:

"declaration": true,
"declarationDir": './anyFolderYouLike'

这将在 tsc 运行时为您的 TypeScript 项目生成类型。有关如何配置tsc 的更多信息,请参阅here。

许多人在DefinitelyTyped 上托管他们的类型。这样一来,您应该能够按照您希望的方式安装类型。

不过,我看到越来越多的人使用自己的包来交付他们的类型。这样就无需单独安装它们。如果你想这样做,你应该在package.json 中指定类型位置,即:

"types": "./lib/index.d.ts"

有关发布的更多总体信息,请参阅TypeScript publishing documentation。

【讨论】:

感谢您提供详细信息,您是对的,最好在项目中包含类型,我也会这样做。 为了让你的包的 ts 调用者在编辑器中看到你的类型定义,他们必须使用语法 import myAwesomePkg = require('my-awesome-pkg') 而不是 commonJS 语法 let myAwesomePkg = require('my-awesome-pkg')

以上是关于npm 包的可安装 typescript 类型定义的主要内容,如果未能解决你的问题,请参考以下文章

pack 方便的npm 构建工具

自定义npm包——typeScript版本

TypeScript基本知识

如何在 TypeScript 2 项目中为 Firebase 3 安装类型?

TypeScript NPM 包的目标架构

TypeScript:覆盖和修复包的类型定义