【问题标题】:Wrap function and preserve input and return types?包装函数并保留输入和返回类型?
【发布时间】:2023-04-02 06:23:01
【问题描述】:

是否可以像这样包装一个函数并保留类型?

const example = (alpha: string): string => alpha + 'beta';
const wrappedFn = (fn: Function) => fn;

如何从fn 中提取类型并返回与传入函数相同的输入和返回?

【问题讨论】:

    标签: typescript


    【解决方案1】:

    您可以在剩余参数中使用元组保留所有输入参数类型(即使有更多参数):

    const example = (alpha: string): string => alpha + 'beta';
    const wrappedFn = <A extends any[], R>(fn: (...args: A) => R) => (...args: A): R => {
        console.log("executing");
        return fn(...args);   
    };
    
    wrappedFn(example)("a")
    

    【讨论】:

      【解决方案2】:

      你可以使用泛型让fn返回一个与输入函数返回相同类型的函数:

      const wrappedFn = <T>(fn: (T) => T) => fn;
      

      【讨论】:

      • 谢谢,这并不能准确反映输入类型,显示为any
      猜你喜欢
      • 1970-01-01
      • 2021-09-04
      • 2021-10-06
      • 2018-02-23
      • 2020-06-12
      • 1970-01-01
      • 2021-07-01
      • 2022-12-04
      • 2021-05-03
      相关资源
      最近更新 更多