在TypeScript中将函数的返回类型推断为param

时间:2019-10-25 13:26:22

标签: typescript typescript-generics

我有一个函数getData,它需要一个可选参数:一个用于转换数据的函数。 在getData函数内部,我以某种方式获取了原始数据(细节并不重要)。

我希望Typescript基于传递给getData的转换函数的类型来正确推断getData的返回类型

function request<T>():T {
    return "12" as unknown as T
}

function getData<Input>(transform?: undefined): Input
function getData<Input, Output>(transform: (data: Input) => Output): Output
function getData<Input, Output>(transform?: (data: Input) => Output) {
    const data = request<Input>()
    if (transform) {
        return transform(data)
    }

    return data
}
const outputAsString = getData<string>()
const outputAsNumber = getData<string, number>(data => data.length)

此代码有效。我要避免的是在第二个示例中传递第二个泛型,因为我认为可以从转换函数的返回类型推断出它。 但是,当我这样做时:

const outputAsNumber = getData<string>(data => data.length)

我在数据和any上得到了明确的Argument of type '(data: any) => any' is not assignable to parameter of type 'undefined'.

0 个答案:

没有答案