TypeScript自定义.d.ts声明文件引用其他声明找不到类型如何解决
问题排查与解决方法
核心原因
你遇到的报错本质是Company类型没有被识别为全局类型,或声明文件没有被TS正确加载,两个常见触发点:
src/types/company.d.ts中使用了export导出语法:一旦声明文件中存在export关键字(包括export interface Company、末尾加export {}等写法),该文件会被TS判定为模块,内部声明的类型不会注册到全局作用域,必须导入才能使用。而你用到的File是浏览器原生全局类型、Recruiter应该是其他未加导出的声明文件里的全局类型,所以可以正常识别。- 少数低版本TS中,
include配置仅写src/**/*.ts可能不会主动匹配.d.ts后缀的声明文件,导致company.d.ts没有被加载。
解决方法
方案1:维持全局类型(推荐,适合全项目复用的公共类型)
删除src/types/company.d.ts中的所有export相关代码,确保内容为纯全局声明:
declare interface Company { companyName: string; companyUrl: string; } // 不要加任何export语法
如果调整后仍有报错,可以把tsconfig.json的include配置补充明确的声明文件匹配规则:
"include": [ "src/**/*.ts", "src/**/*.d.ts" ]
方案2:模块式导入(适合小范围使用的类型)
如果你需要保持类型的模块隔离性,保留company.d.ts的export导出,在role.d.ts顶部手动导入类型即可:
// src/types/role.d.ts 开头添加导入语句 import type { Company } from './company' declare interface Role { // 原有属性定义保持不变 company?: Company; // 原有属性定义保持不变 }
内容的提问来源于stack exchange,提问作者Shamoon
相关产品推荐
相关产品推荐

