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
相关产品推荐
相关产品推荐

