我具有以下函数,该函数采用可选值并将其映射到其他值,除非它是setUp
或null
。我目前的解决方案如下:
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>
,使输入变为!
?我对解决方案的改进非常感激!
答案 0 :(得分:1)
现在,条件类型与函数的返回类型之间存在奇怪的关系,但是在您的情况下,您可以做一些技巧,使其具有可能的最宽类型的重载,并处理已知的{{1} }和null
传递给函数:
undefined