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

如何在VS Code项目中全局使用自定义.d.ts类型文件?

解决TypeScript自定义类型全局可用的问题

看起来你遇到的核心问题是带export的.d.ts文件会被当成模块,而非全局环境声明,所以即便配置了typeRoots,TypeScript也不会自动把这些类型注册到全局命名空间里。下面给你几个可行的解决方案,按简单到复杂排序:

方案1:将类型文件改为全局环境声明(推荐)

直接去掉MyInterfaces.d.ts里的export关键字,整个文件就会变成TypeScript的环境声明文件,TypeScript会自动识别并把里面的类型注册到全局:

// MyInterfaces.d.ts
type IGenericObj = { [key: string]: any; }
interface IReactJsonObj {
  component: string;
  key: number;
  props: {
    className?: string;
    id: number;
    to?: string;
    query?: string;
    src?: string;
    alt?: string;
    height?: number;
    children?: IReactJsonObj[];
  };
}
interface IReactSideProps {
  amount: number;
  height: number;
  name: string;
  width: number;
}

然后修正tsconfig.json的配置:

  • 如果你用typeRoots,注意它指向的是目录而非具体文件:
    {
      "compilerOptions": {
        "typeRoots": [ "../../../../../../types", "./node_modules/@types" ]
      }
    }
    
  • 更稳妥的方式是在include数组里直接添加该文件路径,确保TypeScript能找到它:
    {
      "include": [
        "../../../../../../types/MyInterfaces.d.ts",
        "src/**/*" // 保留你原本的src目录包含规则
      ]
    }
    

修改后,你在任何.ts/.tsx文件里都能直接使用IGenericObj、IReactJsonObj等类型,无需导入,智能提示也会正常工作。

方案2:保留export,通过declare global注册全局类型

如果你需要同时支持导入使用和全局使用(比如部分场景需要显式导入,部分场景想直接用),可以在MyInterfaces.d.ts里添加declare global块,把导出的类型注册到全局:

// MyInterfaces.d.ts
// 保留原有导出,供需要导入的场景使用
export type IGenericObj = { [key: string]: any; }
export interface IReactJsonObj {
  component: string;
  key: number;
  props: {
    className?: string;
    id: number;
    to?: string;
    query?: string;
    src?: string;
    alt?: string;
    height?: number;
    children?: IReactJsonObj[];
  };
}
export interface IReactSideProps {
  amount: number;
  height: number;
  name: string;
  width: number;
}

// 将导出的类型注册到全局命名空间
declare global {
  type IGenericObj = import('./MyInterfaces').IGenericObj;
  interface IReactJsonObj extends import('./MyInterfaces').IReactJsonObj {}
  interface IReactSideProps extends import('./MyInterfaces').IReactSideProps {}
}

注意这里的import('./MyInterfaces')是TypeScript的类型导入,要确保路径正确。之后同样要保证该文件被tsconfig的include或typeRoots包含,就能全局使用这些类型了。

常见排查点

  • 确认tsconfig.json的路径是否正确:如果项目结构较深,相对路径容易出错,可尝试用基于项目根目录的绝对路径(比如./types/MyInterfaces.d.ts,若types目录在根目录)。
  • 重启编辑器/IDE:有时候TypeScript语言服务不会自动刷新,重启后智能提示就会生效。
  • 检查是否有类型冲突:比如是否有其他文件定义了同名的全局类型,导致识别异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:26:55