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

如何正确导出TypeScript库类以供外部包继承扩展?

TypeScript库对外暴露类的正确方案

最佳实践:统一入口重导出

解决内部路径依赖问题的核心是把对外API收敛到根入口文件,具体步骤:

  1. 在MyPkg的src根目录创建/修改index.ts,重导出需要暴露的MyPkgClass:
    // src/index.ts
    export { MyPkgClass } from './path/to/mypkg/MyPkgClass';
    // 后续新增对外API都在这里统一导出
    
  2. 配置package.json的入口字段,让Node.js和TypeScript都能正确识别包的入口:
    {
      "main": "./bin/index.js", // CommonJS环境入口
      "module": "./bin/index.esm.js", // ES模块入口(可选,优化tree-shaking)
      "types": "./bin/index.d.ts", // 类型定义文件入口
      "exports": { // 现代包推荐的入口配置,覆盖不同模块系统
        ".": {
          "import": "./bin/index.esm.js",
          "require": "./bin/index.js",
          "types": "./bin/index.d.ts"
        }
      }
    }
    
  3. 消费包OtherPkg直接从包名导入,彻底摆脱内部路径限制:
    import { MyPkgClass } from 'MyPkg';
    export class OtherClass extends MyPkgClass {
      // 你的扩展逻辑
    }
    

关于类型导出的说明

  • 只要你在tsconfig.json中开启了declaration: true,TypeScript会自动为export的类生成对应的类型定义,不需要额外写export type——仅当导出纯类型(比如接口、类型别名)时才需要用export type。
  • 确保tsconfig.json的类型生成配置正确:
    {
      "compilerOptions": {
        "declaration": true, // 生成.d.ts文件
        "declarationDir": "./bin", // 类型文件输出目录
        "outDir": "./bin", // JS文件输出目录
        // 其他必要配置:target、module、moduleResolution等
      }
    }
    

TypeScript官方规范参考

  • 官方明确推荐将库的对外API集中到根入口文件,避免消费方依赖内部文件结构,这样后续调整库的内部目录时,不会破坏外部代码。
  • 优先使用package.json的exports字段配置入口,它能更精准地处理不同模块系统的导入逻辑,同时保证类型定义和JS文件的关联一致性。
  • 类型定义文件必须和编译后的JS文件路径对应,通过types字段指定后,消费包导入时TypeScript会自动加载对应的类型信息。

内容的提问来源于stack exchange,提问作者user2054627

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 08:47:21