当前位置: 首页 > 知识库问答 >
问题:

typescript - ts [].find.call 这种写法怎么用?

强德厚
2023-09-01
  const topAncestorElement =    [].find.call(document.querySelectorAll('[draggable-group-name]'), (e: HTMLElement) => e.contains(dom))

topAncestorElement 的类型是 call 的返回值 undefined
我希望使用 [].find.call 这种写法,要怎么修改呢?


as unknown as HTMLElement 这样断言就行了。之前没注意看提示...

共有2个答案

吴凯
2023-09-01

不只 call,也包括 bindapply 等方法,如果传入的是带有泛型参数(数组 Array<T> 就是个典型的带有泛型的类型)的函数,泛型信息都会丢失。你这里因为 find 函数本身的返回值是类型是 T | undefined,所以 T 丢了还剩个 undefined

目前除了手动 as 强行断言,没招儿。

见此 Issue: https://github.com/microsoft/TypeScript/issues/54707


P.S. 考虑下 Array.from

const topAncestorElement = Array.from(document.querySelectorAll('[draggable-group-name]')).find(e => e.contains(dom)));
陶鸿畴
2023-09-01

as unknown as HTMLElement

 类似资料:
  • 这是记录用户下载的表,想统计表内每个文章被下载了几次,也就是需要拿到一个文章ID,然后再求下这个ID出现的次数。

  • 请问这种类型赋错了怎么加进eslint的校验规则?eslint检查不了这种错误吗?可以看出这个错误是ts抛出的,已经安装了typescript-eslint的包。 根据回答调整的eslint设置,还是不行

  • 某些情况下,我并不需要 ts 为我的功能函数进行类型检查,我只需要它帮我提醒使用者 功能函数 有哪些调用方式;因此我不想使用 a.ts 将其混入到一个文件。 如何做?请以此为例 希望的使用方式: 仅引入一个文件就能进行使用,并且能够接受 ts 的类型束缚。 如同 echarts 插件一样,将 js-功能实现 和 ts-使用限制 分开。 环境:vue3 , vite

  • 问题: impl: @Service public class GraduateCollegeServiceImpl extends ServiceImpl<GraduateCollegeMapper, GraduateCollege> implements IGraduateCollegeService { controller: @Api(tags="各高校") @RestController

  • 本文向大家介绍怎么配置使vue2.0+支持TypeScript写法?相关面试题,主要包含被问及怎么配置使vue2.0+支持TypeScript写法?时的应答技巧和注意事项,需要的朋友参考一下 配置ts-loader,tsconfig 增加类型扩展,让ts识别vue文件 vue文件中script里面换成ts写法, 需要增加几个ts扩展的package, 比如vue-property-decorato

  • interface IconCardProps { img: any; text: string; } 其中 img 是图片,通过import 导入进来的,怎么定义呢大家?