TypeScript中interface定义返回void的方法实现时为何不报错
TypeScript 接口void返回类型兼容规则说明
这是TypeScript刻意设计的类型规则,并非异常问题。
- 首先纠正一个常见的认知误区:TS中
void作为返回类型的作用,不是强制要求函数不能返回任何值,而是约定该函数的返回值不允许被使用。只要调用方不会用到返回值,函数本身返回任意内容都是合法的。 - 你给出的示例里,接口
Check定义_meth(): void,本质是限制「调用_meth时不能依赖它的返回值做操作」,对实现方的返回内容没有强制约束,所以类实现里返回字符串不会触发报错。
设计的合理性
这个规则是为了适配大量常规开发场景,最典型的就是数组遍历方法:
// forEach的回调类型定义为 (value: T) => void [1, 2, 3].forEach(item => { // 这里返回任意值都不会报错,是非常普遍的写法 return item * 2 })
如果TS强制要求void返回的函数不能有return语句,上述常见写法就会报错,反而会增加不必要的开发成本。
规则验证
你可以尝试使用_meth的返回值,TS会立刻抛出类型错误:
const demo = new ClassDemo() // res的类型被推断为void const res = demo._meth() // 下一行会直接报错:类型“void”上不存在属性“toString” res.toString()
内容的提问来源于stack exchange,提问作者Rahul R Nair
相关产品推荐
相关产品推荐

