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

如何让TypeScript不将.d.ts文件的导入输出到JS代码中?

解决TypeScript类型定义导入不输出到JS的问题

我来帮你搞定这个困扰——其实TypeScript从3.8版本开始就提供了专门的语法,能让你只导入类型定义,完全不会把这条导入语句编译到最终的JS文件里,正好匹配你的需求。

核心解决方案:使用类型专属导入(Type-Only Imports)

直接把你的导入语句改成类型导入语法就行,它的作用是明确告诉TypeScript:“我只需要这个模块的类型信息,不要把这条导入编译到JS里”。

修改后的导入代码:

import type * as third_party from './typings/third.party';

这样处理后,TypeScript会正常识别你的类型定义,编译后的JS文件里完全不会出现这条导入语句,完美符合你的要求。

为什么之前的方法行不通?

  • 普通import语句:TypeScript会把它当作“值导入”处理,哪怕你导入的是.d.ts文件,也会保留在JS输出里,因为TS默认认为你可能需要这个模块的运行时内容。
  • 直接导入.d.ts扩展名:TS本身禁止这种写法,因为它会自动扫描并处理类型定义文件,不需要你显式指定.d.ts后缀。
  • /// <reference path="..." />指令:这条指令没生效大概率是因为你的tsconfig.json配置问题,比如include数组没包含typings目录,导致TS没扫描到你的类型定义文件。不过这种方式本身就不如类型导入直观和可靠。

额外配置建议(确保TS能找到你的类型定义)

为了让TS自动识别你的typings目录下的类型定义,建议在tsconfig.json里做以下配置:

{
  "compilerOptions": {
    "target": "esnext",
    "module": "esnext"
    // 其他你的配置...
  },
  "include": [
    "src/**/*", // 你的源码目录
    "typings/**/*.d.ts" // 新增这一行,让TS扫描typings下的所有类型定义文件
  ]
}

这样配置后,TS会自动加载typings目录下的所有.d.ts文件,你甚至可以不用手动导入,直接使用里面定义的类型(如果是模块类型还是建议用import type,代码更清晰)。

补充:如果是全局类型定义

如果你的第三方库是全局挂载的(不是模块形式),可以在third.party.d.ts里用declare global声明全局类型,比如:

declare global {
  interface Window {
    ThirdParty: {
      someFunc: (arg: string) => void;
      // 其他API类型...
    }
  }
}

这种情况下,你不需要任何导入语句,直接在代码里使用window.ThirdParty就能获得类型提示,也不会有任何多余的JS输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:35:56