Typescript:如何在不丢失函数类型的情况下使用特定的第一个参数定义泛型函数?

时间:2018-07-02 02:52:56

标签: typescript

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

  • 函数的调用者必须传入一个对象,该对象的属性是所有以数字作为第一个参数的函数(任何其他参数可以是任何东西,返回类型可以是任何东西)
  • 要求输出的用户使用与调用方的函数签名匹配的参数来调用每个函数(但不包含第一个参数)

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 个答案:

没有答案