TypeScript递归类型生成声明后变为any,求无需显式注解的隐式解决方案
问题根因
你遇到的构建后类型变为any的问题,本质是TypeScript在生成.d.ts声明文件(对应你配置里的declaration: true)时,无法自动推导递归结构的返回类型,会直接降级为any。开发阶段单文件内的局部类型推导可以正常工作,是因为不需要输出完整的跨文件可用的类型声明,不需要处理递归类型的定义序列化问题。
可行的轻量化方案
完全零类型注解的方案目前在TypeScript中不存在,因为递归类型推导需要至少一个显式的类型锚点来避免推导死循环,这是TypeScript类型系统的设计限制。
不过你可以用比现有方案更轻量化的注解写法,只需要给递归返回的chain方法加返回值注解即可,不需要定义完整的函数类型:
export const chainCreator = () => { return { // 仅给chain方法添加返回值类型注解,其余类型自动推导 chain: (): ReturnType<typeof chainCreator> => { return chainCreator() }, end: () => { return 'end' }, } }
这个方案的维护成本极低:后续如果你修改返回对象的其他属性、方法,不需要同步修改类型注解,所有非递归部分的类型都会自动推导,完全符合你要的自动化、低维护成本的需求。
补充说明
你的tsconfig配置没有问题,不需要调整配置来适配这个场景。
内容的提问来源于stack exchange,提问作者Acid Coder
相关产品推荐
相关产品推荐

