推断链式函数的 ReturnType<>

问题描述

我正在使用 twilio-node 包,还有 fetch function

lookupResponse = await twilioClient.lookups.v1.phoneNumbers('+123').fetch({type: 'carrier'});

具有明确定义的返回类型 Promise<PhoneNumberInstance>。由于我事先初始化了 lookupResponse,我想直接提取/推断函数的返回类型。

现在,我已经知道如何解开 Promise 的类型了:

export type ThenArg<T> = T extends PromiseLike<infer U> ? U : T;

但是如何指定之前链接phoneNumbers 函数的参数? 试试这个:

let lookupResponse: ThenArg<
  ReturnType<typeof twilioClient.lookups.v1.phoneNumbers.fetch>
>;

抛出 Property 'fetch' does not exist on type 'PhoneNumberListInstance'

我需要通过什么?

let lookupResponse: ThenArg<
   ReturnType<typeof twilioClient.lookups.v1.phoneNumbers.???.fetch>
//                                                        ^^^            
>;

解决方法

我对 Twilio 一无所知,如果我误导了您,请提前道歉,但根据您的代码,phoneNumbers 是一个函数,而不仅仅是一个属性。因此,您需要 fetch 的返回类型上的 twilioClient.lookups.v1.phoneNumbers 函数的返回类型。类似的东西:

type LookupResponseType = ThenArg<
    ReturnType<
        ReturnType<
            typeof twilioClient["lookups"]["v1"]["phoneNumbers"]
        >["fetch"]
    >
>;

Playground link with mockup