基于可选对象参数推导TypeScript函数返回类型
TypeScript辅助函数根据options参数推导返回类型问题
我有一个接收可选options参数的TypeScript辅助函数,希望根据传入的options参数(结合默认值)推导函数的返回类型。当前实现未做类型推导,始终返回Promise<void>。
期望行为:
- 当无需返回结果时,返回类型为
Promise<void> - 当需要返回结果时,返回类型为
executionHandler的返回类型对应的Promise<ReturnType> - 具体规则由
options的awaitExecution和returnResult属性决定(二者默认值均为true)
当前代码实现
type Options = { awaitExecution?: boolean; returnResult?: boolean; }; type MaybeAsyncFunction<T> = () => T | Promise<T>; async function apiCall<ReturnType>( executionHandler: MaybeAsyncFunction<ReturnType>, options?: Options ) { const { awaitExecution = true, returnResult = true } = options ?? {}; try { if (awaitExecution) { const result = await executionHandler(); if (returnResult) { return result; } } else { executionHandler(); } } catch (err) { /** error handling */ } return; }
示例调用期望
const executionHandler = () => 'abc'; apiCall(executionHandler); // 应返回Promise<string> apiCall(executionHandler, { awaitExecution: true }) // 应返回Promise<string> apiCall(executionHandler, { awaitExecution: false }) // 应返回Promise<void>
尝试过的方案(未成功)
type ApiCallReturnType<T, O> = O extends undefined ? T : O extends { awaitExecution: true; returnResult: true } ? T : void; async function apiCall<ReturnType, Opts extends Options = object>( executionHandler: MaybeAsyncFunction<ReturnType>, options?: Opts ): Promise<ApiCallReturnType<ReturnType, Opts>> { /* try catch */ return Promise.resolve() as ApiCallReturnType<ReturnType, Opts>; // To return void }
内容的提问来源于stack exchange,提问作者KorbenDose
相关产品推荐
相关产品推荐

