返回
TS进阶之infer——条件类型和判断真假的神器
前端
2023-10-03 03:07:54
TS中的infer是一个强大的特性,它允许我们在条件类型中推断变量的类型。这为我们提供了极大的灵活性,可以创建更具表现力、更健壮的代码。
infer的语法限制:
- infer只能在条件类型的extends子句中使用。
- 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编程技能。