TypeScript开发中ESLint报函数缺失返回类型告警的解决方法
@typescript-eslint/explicit-module-boundary-types 告警消除方案
该告警的触发和入参是否已经标注完整类型没有关系。规则的核心作用是要求所有作为模块对外暴露边界的函数、类公共方法,必须显式标注返回值类型,不允许依赖TypeScript的自动类型推断,避免后续修改函数逻辑时悄悄变更对外返回的类型,导致跨模块调用出现隐蔽的类型不兼容问题。
合规修复方案(推荐,无需改动规则配置)
你编写的createDateTime函数,最终返回的是Date.prototype.toLocaleDateString()的执行结果,返回值类型为string,只需要在函数参数列表的后面补上对应的返回值类型标注即可:
const createDateTime = (d: number): string => { const datetime = new Date(d * 1000); return datetime.toLocaleDateString(); };
修改完成后即可彻底消除该告警。
相关注意事项:
- 只要是被
export导出、会被其他模块引用的函数/类公共方法,无论入参是否已经写了完整类型,都必须补全返回值类型标注,否则就会触发该告警 - 如果函数没有返回值,需要标注
: void;如果返回值是多类型联合,需要标注完整的联合类型,不能省略 - 如果你的函数没有对外导出(未加
export关键字)但依然触发告警,可以检查ESLint中该规则的配置,确认是否错误开启了对模块内部非导出函数的强制返回类型检查,这种场景可以在规则配置中把非导出的内部函数排除在检查范围外
规则调整方案(次选,不推荐轻易使用)
如果团队有明确共识,不需要强制要求模块边界函数的返回类型标注,可以在ESLint配置中调整该规则的参数:
- 通过
allowedNames配置项,把内部工具函数加入白名单,跳过对这类函数的返回类型检查 - 把规则的报错等级从
error调整为warn,或者直接关闭规则
这类调整会失去规则本身的类型防护能力,容易在大项目开发中埋下跨模块类型不兼容的隐患,除非有充分的团队共识,否则优先选择显式标注返回值类型的修复方式。
内容的提问来源于stack exchange,提问作者aahhuhuhu
相关产品推荐
相关产品推荐

