返回

TS进阶之infer——条件类型和判断真假的神器

前端

TS中的infer是一个强大的特性,它允许我们在条件类型中推断变量的类型。这为我们提供了极大的灵活性,可以创建更具表现力、更健壮的代码。

infer的语法限制:

  1. infer只能在条件类型的extends子句中使用。
  2. infer得到的类型只能在true语句中使用。

infer的用法:

让我们通过一个例子来理解infer的用法:

type Conditional<T extends string | number, True, False> =
  T extends string ? True : False;

在这个例子中,Conditional是一个条件类型,它根据T的类型(string或number)推断True或False。

我们可以使用infer来从Conditional中推断T的类型:

type InferredType<T> = Conditional<T, T extends string ? 'string' : 'number', 'not string or number'>;

InferredType是一个泛型类型,它根据T的类型推断字符串或数字。

infer的优势:

使用infer可以带来以下优势:

  • 更具表现力的类型系统: infer允许我们创建更复杂、更精确的类型规则。
  • 更健壮的代码: 通过使用infer,我们可以确保在条件满足时类型系统将强制执行正确的类型。
  • 更好的可读性: infer可以使代码更具可读性,因为它允许我们清晰地表达条件类型和推断出的类型。

实战案例:

让我们看一个更实际的例子来说明infer如何简化和改善我们的代码。

假设我们有一个函数,该函数接受一个数组并返回数组中元素的类型。我们可以使用infer来推断数组元素的类型,如下所示:

function getArrayType<T>(array: T[]): T {
  return array[0];
}

const stringArray: string[] = ['a', 'b', 'c'];
const stringType = getArrayType(stringArray); // string

在上面的例子中,getArrayType函数使用infer来推断数组元素的类型。由于stringArray是一个字符串数组,因此infer将推断stringType的类型为string。

结论

infer是一个在TS中声明条件类型和推断类型时非常有用的特性。它允许我们创建更具表现力、更健壮和更具可读性的代码。通过充分利用infer,我们可以显着提高我们的TS编程技能。