如何使 return 类型以可选参数为条件

How to make return type conditional on optional param

所以我有这样的功能

export function myFunc<T>(dict: Record<string, T>, key: string, fallback?: T): ??? {
  const value = dict[key] as T | undefined;
  return value ?? fallback;
}

如果我调用 myFunc 如果回退被传递,它会知道 undefined 不再是 return 类型的可能性,那就太好了。例如

const x = myFunc<boolean>({}, "hello") // should be typed as boolean | undefined

const y = myFunc<boolean>({}, "hello", false) // should be typed as boolean only but is typed as boolean | undefined

目前,return 类型始终为 T |未定义,即使我通过后备。有没有办法根据可选参数的存在来处理这种条件 return 类型?

这是函数重载。所以我们可以定义我们的 2 个变体,1 个变体定义了 fallback 并键入为 T,另一个变体没有明确定义 fallback。当定义时我们返回 T,当未定义时我们返回 T |不明确的。而且,一旦我们这样做了,您也应该能够删除 as T 转换。

export function myFunc<T>(dict: Record<string, T>, key: string, fallback: T):T;
export function myFunc<T>(dict: Record<string, T>, key: string, fallback?: undefined):T | undefined;
export function myFunc<T>(dict: Record<string, T>, key: string, fallback?: T): T | undefined {
const value = dict[key] as T | undefined;
 return value ?? fallback;
}