Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在typescript中创建传递函数_Typescript - Fatal编程技术网

在typescript中创建传递函数

在typescript中创建传递函数,typescript,Typescript,我很好奇如何创建一个类型化函数,允许您将输入的函数类型作为返回类型和参数进行传递 const preventDefault = function <T> (passThroughFunction: T) { return function (event, ...args): ReturnType<typeof T> { event.preventDefault(); return passThroughFunction(...[event, ...ar

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

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

我如何才能做到这一点?

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

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

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>
const prevent default=function(passThroughFunction:(e:e,…a:a)=>R){
返回函数(事件:E,…参数:A):R{
event.preventDefault();
返回传递函数(事件,…参数);
} 
}
设o=()=>e.movementX}>
设o2=()=>e.keyCode)}>

是否需要有关哪个事件调用preventDefault函数的信息?
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>