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

Posted

技术标签:

【中文标题】如何使返回类型以可选参数为条件【英文标题】:How to make return type conditional on optional param 【发布时间】:2022-01-23 21:56:49 【问题描述】:

所以我有这样的功能

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

如果我调用 myFunc 并且如果通过了回退,那就太好了,它知道 undefined 不再是返回类型的可能性。比如

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

现在,返回类型总是 T |未定义,即使我通过后备。有没有办法根据可选参数的存在来处理这种条件返回类型?

【问题讨论】:

【参考方案1】:

这是函数重载。所以我们可以定义我们的 2 个变体,其中 1 个定义了回退并将其键入为 T,而另一个没有明确定义回退。定义时返回 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;

【讨论】:

以上是关于如何使返回类型以可选参数为条件的主要内容,如果未能解决你的问题,请参考以下文章