为何传入无参回调未触发TypeScript报错?期望1参却传0参
为什么无参回调传入要求接收string参数的函数不报错?
这是TypeScript函数类型兼容性的既定规则——允许传入参数数量更少的回调函数。
TypeScript判断函数兼容性时,只要目标函数(这里是你定义的(value: string) => void)调用时传入的参数,被传入的函数能“安全处理”就行。这里的“安全”指的是:就算回调没声明接收参数,实际调用时传入的string值会被直接忽略,不会触发运行时错误。
举个更清晰的例子:
// 要求接收两个参数的函数类型 type TwoParamFunc = (x: number, y: number) => void; // 传入只接受一个参数的函数,TypeScript不会报错 const myFunc: TwoParamFunc = (x) => console.log(x); myFunc(10, 20); // 输出10,第二个参数被忽略
回到你的代码,someFunc调用回调时会传入string类型的key,但你写的无参回调只是没用到这个参数而已,TypeScript认定这种操作是安全的,因此不会抛出错误。
如果你希望强制回调必须显式声明接收这个参数,可以通过自定义类型约束或者一些类型技巧实现,但默认情况下TypeScript允许这种参数个数兼容的写法。
内容的提问来源于stack exchange,提问作者pedroGarciyaLopez
相关产品推荐
相关产品推荐

