TypeScript函数类型未生效?无报错行为求解释
为什么TypeScript对这个函数赋值不报错?
关于参数不匹配的问题
TypeScript的函数兼容性遵循参数个数兼容规则:当把一个函数赋值给另一个函数类型时,只要目标类型要求的参数数量不超过源函数能接收的数量(或者说源函数可以忽略目标类型的多余参数),就不会触发报错。
你的例子里,functionType要求函数接收1个number参数,但源函数() => { return 1 }不接收任何参数。当调用fn(123)时,源函数只是忽略传入的参数,不会引发运行时错误,所以TypeScript允许这种赋值操作。
关于返回值为void的问题
TypeScript里的void返回类型,核心含义是**“调用该函数的代码不应该使用它的返回值”**,而非“函数绝对不能返回任何值”。
所以当你把有返回值的函数赋值给void返回类型的变量时,TypeScript不会报错——它默认你不会去使用这个返回值。比如你如果写:
const res = fn(123);
TypeScript会把res的类型推断为void,就算函数实际返回了1,你也无法通过类型系统访问这个值。
验证示例
如果想让TypeScript报参数错误,可以反过来:把要求参数的函数赋值给不接受参数的类型,比如:
type NoArgFunc = () => void; const badFn: NoArgFunc = (x: number) => {}; // 此处会报错,因为调用badFn()时无法传入x参数
如果想让返回值报错,需要把目标类型的返回值设为具体类型而非void:
type NumReturnFunc = (x: number) => number; const badFn2: NumReturnFunc = () => {}; // 报错,因为没有返回number类型的值
内容的提问来源于stack exchange,提问作者kostas trip
相关产品推荐
相关产品推荐

