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

如何在TypeScript项目中使用并保留手动编写的声明文件?

解决TypeScript保留手动编写的.d.ts文件的问题

这个需求很常见——想要保留手动维护的类型声明,同时让TS自动处理其他文件的声明生成。下面给你两种可靠的解决方案,根据你的TypeScript版本选择即可:

方法一:使用tsconfig.json的overrides(推荐,TS 3.2+)

这是最精准的方式,只针对foo.ts关闭自动声明生成,其他文件正常生成:

  1. 首先配置你的tsconfig.json,全局开启声明生成,同时给foo.ts单独设置规则:
{
  "compilerOptions": {
    "declaration": true, // 全局开启.d.ts生成
    "outDir": "./dist", // 指定编译输出目录
    "rootDir": "./src", // 源文件根目录(根据你的实际路径调整)
    "target": "ESNext", // 按需设置目标JS版本
    "module": "ESNext"
  },
  "include": ["src/**/*"], // 包含所有源文件和手动的.d.ts
  "overrides": [
    {
      "files": ["src/foo.ts"], // 匹配foo.ts
      "compilerOptions": {
        "declaration": false // 对该文件关闭自动声明生成
      }
    }
  ]
}
  1. 因为TS不会自动复制手动编写的foo.d.ts到输出目录,所以需要加个脚本完成复制。在package.json的scripts里添加:
"scripts": {
  "build": "tsc && cp src/foo.d.ts dist/"
}

(如果是Windows系统,把cp换成copy即可)

方法二:分文件编译(兼容旧TS版本)

如果你的TS版本低于3.2,不支持overrides,可以分开编译不同文件:

在package.json的scripts里配置三个命令,分别处理foo、bar和复制类型文件:

"scripts": {
  "build:foo": "tsc src/foo.ts --declaration false --outDir dist", // 编译foo.ts但不生成声明
  "build:bar": "tsc src/bar.ts --declaration true --outDir dist", // 编译bar.ts并生成声明
  "copy:dts": "cp src/foo.d.ts dist/", // 复制手动的foo.d.ts到输出目录
  "build": "npm run build:foo && npm run build:bar && npm run copy:dts"
}

关键注意事项

  • 类型一致性:手动编写的foo.d.ts必须和foo.ts的导出完全匹配,否则TypeScript会抛出类型错误,这点一定要检查好!
  • 路径适配:上面的示例路径假设你的文件都在src目录下,输出到dist,根据你的实际项目结构调整路径即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:33:44