【问题标题】:Infer return type from function object parameter从函数对象参数推断返回类型
【发布时间】:2021-04-07 15:42:33
【问题描述】:

在 TypeScript 中,我可以像这样从泛型参数推断返回类型。当我使用位置参数时效果很好。

const handleAndReturnNumber = (n: number) => n
const handleAndReturnString = (n: number) => String(n)
const doSomething1 = <R extends (n: number) => ReturnType<R>>(handle: R) => handle(2)


doSomething1(handleAndReturnNumber) // return type of function is number
doSomething1(handleAndReturnString) // return type of function is string

但是,当我使用“命名参数”时,即函数只接受一个参数并且它的类型是对象,我不知道如何才能获得与上述代码相同的结果。 TS里面可以吗?

const doSomething2 = ({handle}: {handle: Function /* ? how to infer return type here? */ }) => handle(2)
doSomething1({handle: handleAndReturnNumber}) // return type of function should be number
doSomething1({handle: handleAndReturnString}) // return type of function should be string

【问题讨论】:

    标签: typescript


    【解决方案1】:

    是不是和你的例子一样?

    const doSomething2 = <
      R extends { handle: (n: number) => ReturnType<R['handle']> }
    >({
      handle,
    }: R) => handle(2);
    

    【讨论】:

    • 不是因为 R 需要扩展对象/接口而不是函数。
    • 那是你需要的吗?
    猜你喜欢
    • 1970-01-01
    • 2014-12-10
    • 2020-06-22
    • 2017-10-15
    • 1970-01-01
    • 2020-01-23
    • 1970-01-01
    • 2020-03-12
    • 1970-01-01
    相关资源
    最近更新 更多