Flow中使用jQuery each()时缺失this注解的类型标注问题求助
Flow中jQuery each方法的类型标注问题
在使用Flow内联标注jQuery基础用法时遇到类型定义难题,代码示例如下:
jQuery(`.someclass`).each(function(j, el) { ... })
尝试添加/*this: Object*/注解无效,因为无法修改外部库函数的参数顺序,但Flow要求this作为首个参数。当前已在文件顶部声明declare var jQuery: any,是否需要更具体的类型定义?
是的,必须给jQuery定义更具体的类型,不能用any兜底——any会完全跳过Flow的类型检查,失去静态类型校验的意义。
针对each方法的场景,你可以手动声明jQuery的类型结构,适配它的回调参数顺序(索引在前、元素在后),同时指定this的类型:
declare var jQuery: { (selector: string): { each(callback: (this: Element, index: number, element: Element) => void): void; }; };
这样定义后,Flow就能正确识别回调里this的指向(当前DOM元素),同时校验索引和元素的类型,不需要调整回调的参数顺序。
如果觉得手动声明太繁琐,也可以使用社区维护的Flow类型包,直接引入完整的jQuery类型定义,不用自己逐个方法编写。
内容的提问来源于stack exchange,提问作者Olle Härstedt
相关产品推荐
相关产品推荐

