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

发布TypeScript库时是否需生成声明文件及关联JavaScript?

关于TypeScript库发布与直接导入类型的问题

首先明确本地能用但发布后失效的原因:
你本地用yarn link时,bar项目的TypeScript配置大概率覆盖到了foo的源码目录(比如include范围包含了foo的路径),所以能直接解析并编译.ts文件。但发布后foo会被安装到用户项目的node_modules中,默认情况下TypeScript不会编译node_modules里的.ts文件,用户自然无法识别和运行你的库代码。

接下来分两种核心场景解答你的问题:

场景1:foo是纯类型库(无运行时代码)

这种情况完全可以不用tsc编译成JS,只需要生成类型定义文件即可:

  • 执行tsc --declaration命令生成对应的.d.ts类型文件(无需生成JS)
  • 在package.json里配置types字段指向类型入口(比如"./index.d.ts")
  • 将.d.ts文件加入files字段,确保发布时能上传到仓库
  • 用户安装后,TypeScript会自动识别类型定义,直接导入使用即可(纯类型库仅在编译阶段起作用,不需要运行时JS)

示例package.json配置:

{
  "name": "foo",
  "version": "1.0.0",
  "types": "./index.d.ts",
  "files": ["index.d.ts"],
  "type": "module"
}

场景2:foo包含运行时代码(比如LibraryClass有实际方法实现)

这种情况无法完全跳过tsc编译,因为JS运行环境(Node.js、浏览器)无法直接执行TypeScript代码,可选两种方案:

  • 方案一(不推荐):要求所有使用者修改自身项目的tsconfig.json,把node_modules/foo加入include列表,并配置匹配的编译选项。但这种方式对使用者不友好,配置成本高且易出现版本冲突。
  • 方案二(标准做法):用tsc编译生成JS文件和对应的.d.ts类型文件,发布时同时上传两类文件:
    • 在tsconfig.json中设置compilerOptions.declaration: true,确保编译时生成类型文件
    • package.json里main字段指向编译后的JS入口,types字段指向编译后的类型入口
    • 将编译输出目录(比如dist)加入files字段
    • 用户安装后既能运行编译好的JS代码,又能获得完整的类型提示

示例package.json配置:

{
  "name": "foo",
  "version": "1.0.0",
  "main": "./dist/index.js",
  "types": "./dist/index.d.ts",
  "files": ["dist"],
  "scripts": {
    "build": "tsc"
  }
}

总结:纯类型库可仅发布类型定义无需编译JS;带运行时逻辑的库必须编译成JS才能让用户正常运行,类型定义则用于提供TS语法提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 15:57:44