如何在TypeScript中正确键入mapOptional函数?

时间:2019-01-18 13:34:51

标签: typescript typescript-types conditional-types

我具有以下函数,该函数采用可选值并将其映射到其他值,除非它是setUpnull。我目前的解决方案如下:

undefined

有两件事困扰着我:

  • 为什么我必须将返回值强制转换为type Return<I, R> = I extends null ? null : I extends undefined ? undefined : R; /** * Maps an optional value to another optional by a callback. * * @param input - The input value to map. * @param callback - The callback to map the value. * @returns An optional mapped value. */ export function mapOptional<I, R>(input: I, callback: (value: NonNullable<I>) => R): Return<I, R> { if (input === null) { return null as Return<I, R>; } if (typeof input === 'undefined') { return undefined as Return<I, R>; } return callback(input!) as Return<I, R>; }
  • 为什么必须使用爆炸运算符Return<I, R>,使输入变为!

我对解决方案的改进非常感激!

1 个答案:

答案 0 :(得分:1)

现在,条件类型与函数的返回类型之间存在奇怪的关系,但是在您的情况下,您可以做一些技巧,使其具有可能的最宽类型的重载,并处理已知的{{1} }和null传递给函数:

undefined