为何参数更少的TypeScript回调函数可匹配目标类型?
为什么callback0、callback1、callback2能匹配ArrMapCallbackFunctionTypeExpression类型?
TypeScript的函数类型兼容性里有个关键规则:参数个数更少的函数,可以赋值给参数个数更多的函数类型——因为当调用这个函数时,额外传入的参数会被函数直接忽略,不会引发运行时错误。
具体到你的代码里:
- callback0:没有定义任何参数,但返回值是符合要求的
number类型。当map内部调用它时,会传入value、index、arr三个参数,但callback0根本不接收这些参数,完全不影响它返回1,所以类型检查通过。 - callback1:只定义了第一个参数
value,剩下的index和arr参数被它忽略。map调用时传入的三个参数里,它只用第一个,剩下的不管,逻辑完全正常,类型兼容。 - callback2:定义了前两个参数
value和index,第三个arr参数被忽略。同样,map调用时传入的三个参数里,它处理前两个,第三个不用,不会有任何问题,因此类型检查通过。
反过来要注意:如果一个函数的参数比目标类型要求的多,就不能赋值过去——因为调用时可能传不够参数,会导致运行时错误,但你代码里的情况是参数更少的函数适配参数更多的类型,这种场景是安全的,所以TypeScript允许这样的类型匹配。
内容的提问来源于stack exchange,提问作者Black Wind
相关产品推荐
相关产品推荐

