推断链式函数的 ReturnType<>

Inferring the ReturnType<> of a chained function

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

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

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

现在,我已经知道如何打开 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 是一个函数,而不仅仅是 属性。所以你需要 return 类型的 fetch 函数,它位于 twilioClient.lookups.v1.phoneNumbers 的 return 类型上。类似于:

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

Playground link with mockup