如何批量指定*.d.ts类型文件?TypeScript包类型配置咨询
批量导出TypeScript类型的简便方案
方案1:通过src入口文件自动同步类型声明
- 在项目
src目录下创建index.ts,用批量导出语法整合所有对外暴露的模块:// src/index.ts export * from './ride'; export * from './test'; // 按项目模块结构依次导出,或按规则批量导出 - 配置
tsconfig.json开启声明文件生成:{ "compilerOptions": { "declaration": true, "declarationDir": "./types", "outDir": "./dist" }, "include": ["src/**/*"] } - 执行
tsc编译后,types目录会自动生成对应index.d.ts,包含所有导出类型 - 在
package.json中指定类型入口:
无需手动维护声明文件,外部项目可直接识别类型。{ "main": "./dist/index.js", "types": "./types/index.d.ts" }
方案2:用工具自动生成导出入口
如果不想手动编写src/index.ts的导出语句,可借助工具自动生成:
- 使用api-extractor:
- 安装依赖:
npm install @microsoft/api-extractor --save-dev - 项目根目录创建
api-extractor.json,配置入口文件与输出目录 - 运行
api-extractor run,工具会自动扫描对外导出内容,生成统一的index.d.ts到types目录
- 安装依赖:
- 自定义Node脚本:
写个简单脚本遍历src目录,自动生成src/index.ts的导出语句:
运行脚本生成导出后,执行// generate-index.js const fs = require('fs'); const path = require('path'); const srcDir = path.join(__dirname, 'src'); const indexPath = path.join(srcDir, 'index.ts'); const exports = []; fs.readdirSync(srcDir).forEach(file => { if (file.endsWith('.ts') && file !== 'index.ts') { const moduleName = file.replace('.ts', ''); exports.push(`export * from './${moduleName}';`); } }); fs.writeFileSync(indexPath, exports.join('\n'));tsc编译即可。
方案3:通过package.json的exports字段区分TS/非TS导入
若想让TS项目直接导入src源码,同时支持非TS项目加载编译后的JS文件,可配置package.json的exports字段:
{ "main": "./dist/index.js", "types": "./types/index.d.ts", "exports": { ".": { "import": "./dist/index.js", "require": "./dist/index.js", "types": "./types/index.d.ts" }, "./src/*": { "types": "./src/*.d.ts", "default": "./src/*.ts" } }, "typesVersions": { "*": { "src/*": ["src/*"] } } }
TS项目可直接通过import { tee } from 'your-package/src/ride'获取源码与类型,非TS项目则用require('your-package')加载编译后的JS文件。
内容的提问来源于stack exchange,提问作者Daniil Screpchenko
相关产品推荐
相关产品推荐

