typescript 多种输入类型

c3frrgcw  于 2023-04-13  发布在  TypeScript
关注(0)|答案(1)|浏览(99)
type InputValue<Output> = Output | Promise<Output> | (() => Output | Promise<Output>);

async function test<Output>(data: InputValue<Output>): Promise<Output> {
    return typeof data === 'function' ? data() : data
}

这给出了误差:

This expression is not callable.
  Not all constituents of type '(() => Output | Promise<Output>) | (Output & Function)' are callable.
    Type 'Output & Function' has no call signatures.

从技术上讲,可能可以工作,但我想得到类型也很高兴。我认为这是某种方式相关的输出类型本身可以是任何东西(甚至函数)?

pjngdqdw

pjngdqdw1#

我花了一段时间才发现输出不能是函数,但是是的,逻辑无法知道它是函数来获取值还是回调函数来返回函数引用。

type Loadable<Output> = Output extends Function
    ? never
    : Output | Promise<Output> | (() => Output | Promise<Output>);

async function getLoadableValue<Output>(data: Loadable<Output>): Promise<Output> {
    return typeof data === 'function' ? data() : data
}

感谢@pink和@jcalz的帮助!

相关问题