TypeScript中如何强制对象的方法显式声明返回类型?
问题原因
@typescript-eslint/explicit-function-return-type 默认开启了 allowTypedFunctionExpressions 配置项,规则逻辑为:如果函数/方法所处的位置已经存在显式 TypeScript 类型注解,就跳过该函数的返回类型检查,默认认为类型上下文已经完成了返回值约束。
当你给对象标注Record<string, any>这类带any的宽泛类型时,类型系统不会对对象内部方法的返回值做有效校验,规则又因为对象本身有类型注解直接跳过检查,就出现了漏检。
修复配置
修改ESLint规则配置,关闭所有默认的免检逻辑,实现全场景覆盖:
{ "rules": { "@typescript-eslint/explicit-function-return-type": ["error", { "allowTypedFunctionExpressions": false, "allowExpressions": false, "allowHigherOrderFunctions": false, "allowDirectConstAssertionInArrowFunctions": false, "allowConciseArrowFunctionExpressionsStartingWithVoid": false }] } }
配置说明:
- 核心配置
allowTypedFunctionExpressions: false会强制所有函数、方法不管所处位置有没有类型注解,都必须显式声明返回类型,你提到的Record<string, any>标注对象内部方法漏检的问题会直接解决。 - 其余几个配置项是规则默认开启的宽松免检逻辑,全部关闭后不会再出现其他场景的漏检。
补充建议
- 搭配
@typescript-eslint/no-explicit-any规则限制代码中any的使用,从根源上避免宽泛类型带来的类型校验漏洞。 - 个别框架约定、确实不需要写返回类型的特殊场景,使用单行/块级ESLint注释临时禁用规则即可,不要全局放宽配置导致漏检。
内容的提问来源于stack exchange,提问作者eXception
相关产品推荐
相关产品推荐

