当前位置: 首页 > news >正文

TS类型声明文件(一)如何在ts npm包项目中生成 d.ts 文件

现在TS项目很多,如果你开发的npm包不支持类型声明文件,对使用ts的开发者不太友好,开发者无法获得ts类型提示。如何在自己的 npm 包中自带 .d.ts 文件,以确保使用者不需要额外配置 tsconfig.json 就能获得类型提示,以下是完整操作步骤记录:

1. 编写 TypeScript 代码

首先,用 TypeScript 编写你的 npm 包。假设你的包名为 my-ts-test,项目结构如下:

my-ts-test/
├── src/
│   ├── index.ts
│   └── utils.ts
├── package.json
├── tsconfig.json

2. 配置 tsconfig.json

在项目根目录下创建或编辑 tsconfig.json 文件,确保它配置正确,能够生成 .d.ts 文件:

{"compilerOptions": {"target": "ES6","module": "commonjs","declaration": true,"outDir": "./dist","strict": true},"include": ["src"]
}

关键配置项说明:

  • declaration: true,生成 .d.ts 文件。

  • outDir: "./dist",编译输出目录。

3. 构建项目

使用 TypeScript 编译器进行构建,生成 .js.d.ts 文件:

tsc

构建后,项目结构如下:

my-ts-test/
├── dist/
│   ├── index.js
│   ├── index.d.ts
│   ├── utils.js
│   └── utils.d.ts
├── src/
│   ├── index.ts
│   └── utils.ts
├── package.json
├── tsconfig.json

4. 配置 package.json

package.json 文件中,指定 maintypes 字段:

{"name": "my-library","version": "1.0.0","main": "dist/index.js","types": "dist/index.d.ts","scripts": {"build": "tsc"},"devDependencies": {"typescript": "^4.0.0"}
}
  • main: 指定主入口文件。

  • types: 指定类型声明文件的入口。

5. 发布包

在发布包之前,确保 dist 目录包含在发布包中,可以在 package.json 中配置 files 字段:

{"files": ["dist"]
}

发布包:

npm publish

6. 使用者角度体验

当使用者安装并使用你的包时,他们不需要任何额外的配置,就能自动获得类型提示。例如:

npm install my-ts-test

在 TypeScript 项目中:

import { someFunction } from 'my-ts-test';someFunction();

因为在 package.json 中指定了 types 字段,TypeScript 编译器会自动找到并加载 dist/index.d.ts 文件,从而提供类型提示和类型检查功能。

通过以上步骤,可以在 npm 包在使用时能够自动提供类型提示,而不需要使用者进行额外的 tsconfig.json 配置。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 黑马头条微服务学习day01-环境搭建、SpringCloud微服务(注册发现、网关)
  • 【自动驾驶/机器人面试C++八股精选】专栏介绍
  • Java技术栈总结:kafka篇
  • 大模型高效参数微调技术
  • Bilibili Android一二面凉经(2024)
  • jenkins系列-06.harbor
  • 微软Win11 24H2七月更新补丁KB5040435发布!附下载
  • Python库 - Scrapy
  • AI机器人在未来的应用场景预测:是否会取代人类?华为、百度、特斯拉他们在AI领域都在做什么?
  • .env.development、.env.production、.env.staging
  • 【MySQL 进阶】MySQL 程序 -- 详解
  • Vue 3中的v-for指令使用详解
  • Python量化交易学习——Part12:回归模型的典型应用
  • PostgreSQL 怎样处理数据仓库中维度表和事实表的关联性能?
  • 快速使用BRTR公式出具的大模型Prompt提示语
  • JavaScript 如何正确处理 Unicode 编码问题!
  • django开发-定时任务的使用
  • Docker: 容器互访的三种方式
  • exports和module.exports
  • HTTP中GET与POST的区别 99%的错误认识
  • nodejs:开发并发布一个nodejs包
  • scala基础语法(二)
  • SQLServer插入数据
  • TypeScript实现数据结构(一)栈,队列,链表
  • 对象管理器(defineProperty)学习笔记
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 前端工程化(Gulp、Webpack)-webpack
  • 日剧·日综资源集合(建议收藏)
  • 实战|智能家居行业移动应用性能分析
  • 在Docker Swarm上部署Apache Storm:第1部分
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • 《天龙八部3D》Unity技术方案揭秘
  • MPAndroidChart 教程:Y轴 YAxis
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • # Java NIO(一)FileChannel
  • #Datawhale AI夏令营第4期#AIGC文生图方向复盘
  • #微信小程序(布局、渲染层基础知识)
  • $(selector).each()和$.each()的区别
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (pycharm)安装python库函数Matplotlib步骤
  • (Ruby)Ubuntu12.04安装Rails环境
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (十七)Flink 容错机制
  • (数据结构)顺序表的定义
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (转) ns2/nam与nam实现相关的文件
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • (转)LINQ之路
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .NET 8 跨平台高性能边缘采集网关
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .NET Micro Framework 4.2 beta 源码探析