typescript - 在 typescript 中创建传递函数

标签 typescript

我很好奇如何创建一个类型化函数,它允许您将输入的函数类型作为返回类型和参数传递。

const preventDefault = function <T> (passThroughFunction: T) {
  return function (event, ...args): ReturnType<typeof T> {
    event.preventDefault();
    return passThroughFunction(...[event, ...args]);
  } 
}

这个坏了。我不确定如何正确使用 ReturnType 或从 passThroughFunction 中提取参数并将它们包含在返回的函数中。

所以我可以这样使用它:

<Button onSubmit={preventDefault(onSubmit)}/>

我该怎么做?

最佳答案

我认为在这里你最好不要使用条件类型。它们将需要在实现中进行类型断言(因为条件类型只要它们仍然具有自由类型参数就不会被解析)

这会起作用,并且实际上允许上下文类型从赋值目标流向您定义的函数,因此如果您使用内联函数,您将获得参数类型推断

const preventDefault = function <E extends SyntheticEvent, A extends any[], R> (passThroughFunction: (e: E, ...a: A) => R) {
  return function (event: E, ...args: A): R {
    event.preventDefault();
    return passThroughFunction(event, ...args);
  } 
}

let o = () => <button onClick={preventDefault(e => e.movementX)}></button>
let o2 = () => <div onKeyDown={preventDefault(e => e.keyCode)}></div>

关于typescript - 在 typescript 中创建传递函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56905574/

相关文章:

angular - Angular2 稳定版中的 md-input 绑定(bind)错误

html - 如何使用插值来设置属性选择器?

javascript - 如何在 Type Script/Java Script 中将字符串数组值合并到对象数组中的特定属性

jquery - 如何在 ionic 2 Angular 应用程序中包含 jQuery

node.js - 无法在生产服务器中的 Docker 容器上模块 'reflect-metadata'

typescript - 安装了云功能包的新 TypeScript 项目存在编译器错误

javascript - 在 Typescript 上声明类型时,前导管道的用途是什么

Angular 8发出多个http请求并合并所有结果

javascript - 带行号的 typescript 调试

html - 调用属于 ngFor 一部分的子组件上的函数