这是一个有趣的问题,理论上说 typeof 和 instanceof 应该起到相同的类型推断作用,但是在泛型 T 的作用下,却推断错误。
复现方式
function f1(a: number | (() => number)) {if (typeof a === 'function') {a()}if (a instanceof Function) {a()}}function f2<T>(b: T | (() => T)) {if (typeof b === 'function') {b() // TS 报错 Type 'T & Function' has no call signatures.}if (b instanceof Function) {b()}}
解决方案
截止目前(2022-03-01)还未修复。可以使用 instanceof Funtion 来代替解决它。
