typescript 如何有条件地从函数返回可选的泛型类型?

m1m5dgzv  于 2023-06-07  发布在  TypeScript
关注(0)|答案(1)|浏览(161)

我有一个非常简单的函数示例。它接受可选的泛型类型和可选的第二个参数,如果提供了第二个参数,它将返回泛型类型。

const helper = async <T = void>(
  config: { body: string},
  applyDataCallback?: (value: string) => T,
): Promise<T | string> => { 
const body = typeof (applyDataCallback) === 'function'
    ? applyDataCallback(config.body)
    : config.body;

return body;

}
当我使用它时,即使提供了泛型,我也总是将值设置为Promise<string| number>;

这里的一切都是合乎逻辑的,但我希望这个函数以下面的方式工作:如果提供了applyDataCallback参数OR泛型,则我希望我值仅为泛型。在屏幕截图的情况下,我已经提供了通用的,和applyDataCallback,但仍然有可能在这里字符串。
有什么办法处理这种情况吗?

kiz8lqtg

kiz8lqtg1#

解决方案是为applyDataCallback添加默认函数,默认情况下将值类型转换为提供的泛型。

applyDataCallback: (value: string) => T = (value) => value as T.

然后总是调用这个回调。

const body = applyDataCallback(config.body)

相关问题