代码之家  ›  专栏  ›  技术社区  ›  Adam A

Typescript:如何定义具有特定第一个参数的泛型函数而不丢失函数类型?

  •  1
  • Adam A  · 技术社区  · 8 年前

    我正在定义一个高阶函数,它接受一组函数,这些函数将被转换为具有较少一个参数的函数(因为我将为第一个参数传递一个值)。我需要以下约束:

    • 输出的用户需要使用与调用者的函数签名匹配的参数来调用每个函数(但是没有第一个参数)

    Sandbox

    class MyFns {
        a(one: number, s: string) {
            return one + s.length;
        }
        b(one: number, n: number, m: number) {
            return one + n + m;
        }
    }
    
    interface ExpectedOutFns {
        a(s: string): number;
        b(n: number, m: number): number;
    }
    
    function passOne(mapOfFns) {
        const transformedMap = {};
        for (const k in mapOfFns) {
            //any[] is wrong here - not exact enough
            // can I somehow type this based on mapOfFns[k]?
            transformedMap[k] = (...args: any[]) => mapOfFns[k](1, ...args);
        }
        return transformedMap;
    }
    
    const out: ExpectedOutFns = passOne(new MyFns()); // Error
    

    这会导致以下错误:

    类型{}不可分配给类型“ExpectedOutFns”。 类型{}中缺少属性“a”。

    我也试过了 explicitly typing everything

    谢谢你的帮助!

    0 回复  |  直到 8 年前
    推荐文章