首页 > 解决方案 > 将函数的返回类型推断为打字稿中的参数

问题描述

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

我希望 TypescriptgetData根据传递给的转换函数的类型正确推断返回类型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'.

标签: typescripttypescript-generics

解决方案


推荐阅读