【问题标题】:How to get type from the return of a function?如何从函数的返回中获取类型?
【发布时间】:2021-10-28 15:38:44
【问题描述】:

我正在尝试在打字稿中创建一个伪管道。这个想法是我会有一个返回对象的函数。然后我会将这个对象传递给其他可以处理这个对象的函数。

函数签名是这样的:

type FirstFunc<T> = () => T;
type Pipeline<T> = ((obj: T) => T)[]

const objPipeLine<T> = (firstFunc: FirstFunc<T>, pipeline: Pipeline<T>): T

但我不想为这个函数提供泛型。我希望它知道第一个函数将返回什么类型的对象并将其用作我的 T 泛型。类似于隐式类型,管道中的函数应该只接受与我的第一个函数返回的对象类型匹配的参数。

【问题讨论】:

    标签: typescript typescript-generics


    【解决方案1】:

    首先这个语法是错误的:const objPipeLine&lt;T&gt;

    如果你想推断函数参数,你应该做const objPipeLine=&lt;T&gt;()=&gt;{}

    只需将泛型放在equal 符号之后即可。

    考虑这个例子:

    type FirstFunc<T> = () => T;
    type Pipeline<T> = ((obj: T) => T)[]
    
    const objPipeLine = <Return,>(firstFunc: FirstFunc<Return>, pipeline: Pipeline<Return>) => {}
    
    const result = objPipeLine(
        () => ({ age: 42 }),
        [(obj) => obj]
    )
    

    Playground

    我创建了Return generic 并让 TS 推断它。如果您将鼠标悬停在[(obj) =&gt; obj] 中的obj 上,您将看到它被推断为{age: number}

    如果您有兴趣键入pipeline 功能,可以查看我的articlethis answerthis answer

    【讨论】:

    • 谢谢!这正是我的目标。效果很好!
    【解决方案2】:

    这就是 typescript 的用途,为它们指定类型,为我们使用 ReturnType 的返回类型分配一个类型

    type some=ReturnType<FirstFunc<T>>
    

    【讨论】:

    • 措辞有点不清楚。 “为我们使用 ReturnType 的返回类型分配一个类型”可能应该这样说“为了获取函数的返回类型,我们使用 ReturnType
    猜你喜欢
    • 2014-12-13
    • 2016-07-01
    • 2018-11-06
    • 2017-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-14
    • 2012-01-29
    相关资源
    最近更新 更多