You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript实现接口时方法缺参未报错,开启strictFunctionTypes仍无效

TypeScript未报错的原因

你的代码示例:

interface ISave{
   save(path: string, computer: Computer): void;
}

class SaveComputerToFile implements ISave{
    public save(): void{
        console.log("saving in file");
    }
}  

核心原因

TypeScript对类成员方法和普通函数的兼容性规则是分开的:

  • 类实现接口时,允许类的方法接受比接口要求更少的参数。因为调用接口定义的save方法时会传入两个参数,而你的类方法只是忽略这些参数,不会引发运行时错误,TypeScript判定这种实现是合法的。
  • strictFunctionTypes选项仅管控普通函数类型之间的赋值兼容性,比如把少参数的函数赋值给多参数的函数类型时会触发报错,但这个规则不适用于类的成员方法。类方法的兼容性默认就允许参数个数更少的实现,开启严格函数类型检查也不会改变这个行为。

如何让这种情况报错

如果想要强制类的方法严格匹配接口的参数定义,可以把类的方法改成函数属性的形式,此时strictFunctionTypes就会生效:

class SaveComputerToFile implements ISave{
    public save: (path: string, computer: Computer) => void = () => {
        console.log("saving in file");
    }
}  

内容的提问来源于stack exchange,提问作者gorsahakyan10

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 22:03:17