MST

星途 面试题库

面试题:TypeScript类型兼容性之函数参数的兼容性

在TypeScript中,有两个函数类型,`(a: number) => void` 和 `(a: number | string) => void`,请问前者能否赋值给后者,为什么?
13.6万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试

在TypeScript中,(a: number) => void 类型的函数可以赋值给 (a: number | string) => void 类型的函数。

原因如下:

  • 函数参数兼容性规则:在TypeScript里,函数参数类型遵循逆变(contravariant)规则。这意味着当进行赋值时,目标类型的参数类型范围需要比源类型更宽泛(或者相等)。
  • 对于 (a: number) => void,它的参数只能接受 number 类型的值。
  • (a: number | string) => void,其参数可以接受 number 类型或者 string 类型的值。
  • 显然,number | string 类型比 number 类型更宽泛,满足函数参数类型的逆变规则。所以 (a: number) => void 类型的函数能赋值给 (a: number | string) => void 类型的函数。