You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flow中显式声明参数为普通非箭头函数类型

Flow中声明非箭头函数类型参数的实现方法

可以实现,核心是通过带this类型约束的函数签名过滤箭头函数,原理是箭头函数没有独立的this上下文,不支持自定义this类型标注,只要你为函数参数加上显式的this类型要求,Flow会自动拒绝箭头函数传入。

具体代码实现如下:

// 用泛型绑定obj类型和函数this的类型
function f<T>(g: (this: T) => void, obj: T) {
  g.call(obj);
}

// 普通函数调用:类型校验通过
f(function() { console.log(typeof this) }, 42)

// 箭头函数调用:Flow会直接抛出类型错误
f(() => { console.log(typeof this) }, 42)

校验规则说明

  • 只有普通函数支持通过this: 类型的语法声明内部this的预期类型,匹配你用call/apply修改this指向的使用场景
  • 箭头函数的this固定继承自外层作用域,无法被call修改,也不支持标注自定义this类型,传入时会触发Flow的类型不匹配报错
  • 如果你需要传入的函数带其他参数,直接在this类型后面补充参数定义即可,比如g: (this: T, arg1: string, arg2: number) => boolean

内容的提问来源于stack exchange,提问作者Steve Bennett

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 05:06:03