You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何批量指定*.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:
    1. 安装依赖:npm install @microsoft/api-extractor --save-dev
    2. 项目根目录创建api-extractor.json,配置入口文件与输出目录
    3. 运行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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 17:16:10