MST

星途 面试题库

面试题:TypeScript类型兼容性之函数参数与返回值

给定两个函数类型,`Func1 = (a: string) => number`,`Func2 = (a: string, b: boolean) => number`。请分析`Func1`和`Func2`的类型兼容性,即能否将`Func1`赋值给`Func2`类型的变量,或者将`Func2`赋值给`Func1`类型的变量,并阐述详细的判断逻辑。如果再增加一个函数`Func3 = (a: string) => void`,它与`Func1`的兼容性又如何,为什么?
26.2万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
  1. Func1Func2的兼容性
    • 能否将Func1赋值给Func2类型的变量
      • 不能。Func1只接受一个string类型的参数,而Func2需要一个string类型和一个boolean类型的参数。当把Func1赋值给Func2类型的变量时,在调用这个变量时,可能会尝试传入第二个boolean类型参数,而Func1并不接受第二个参数,所以Func1不能赋值给Func2类型的变量。
    • 能否将Func2赋值给Func1类型的变量
      • 可以。在JavaScript和TypeScript的函数类型兼容性规则中,赋值目标函数的参数比源函数的参数多是允许的。因为调用Func1类型变量时,只会传入一个string类型参数,Func2函数也接受一个string类型参数作为第一个参数,多出来的boolean类型参数在这种赋值情况下不会被使用,所以Func2可以赋值给Func1类型的变量。
  2. Func3Func1的兼容性
    • 能否将Func3赋值给Func1类型的变量
      • 不能。Func1返回number类型,而Func3返回void类型。在类型兼容性中,返回值类型必须是兼容的,void类型与number类型不兼容,所以Func3不能赋值给Func1类型的变量。
    • 能否将Func1赋值给Func3类型的变量
      • 不能。Func3返回void,而Func1返回numbernumber类型与void类型不兼容,所以Func1不能赋值给Func3类型的变量。