模块 6 · 第 1 课(共 2)课程中的11/14~15 min
模块课程(1/2)
条件类型和推断
条件类型允许您基于继承关系表达重要的类型决策。语法类似于 JavaScript 的三元运算符:
TS
T extends U ? X : Y如果类型 T 可分配给 U,则结果类型将为 X,否则将为 Y。
基本条件类型
条件类型在编译时评估条件:
TS
type IsNumber<T> = T extends number ? true : false;
type A = IsNumber<number>; // true
type B = IsNumber<string>; // false当与泛型结合使用以创建灵活且动态的实用程序类型时,此模式非常强大。
使用 infer 进行类型提取
在条件类型的 extends 子句中,我们可以使用 infer 关键字来声明要由编译器推断的类型变量。
例如,如果我们想提取函数的返回类型:
TS
type GetReturnType<T> = T extends (...args: any[]) => infer R ? R : never;
type ExampleFunction = () => string;
type Return = GetReturnType<ExampleFunction>; // string在此示例中, infer R 告诉 TypeScript 自动确定函数的返回类型,并使其在条件的正分支中用作 R 。
自己尝试一下
练习 1:IsString 类型
锻炼#ts.m6.l1.e1
尝试:0加载中...
创建一个名为 IsString<T> 的泛型类型,如果 T 扩展 string,则返回文字类型 true,否则返回 false。
正在加载编辑器...
显示提示
使用语法 type IsString<T> = T extends string ?真:假;检查类型。
3 次尝试后可用的解决方案
练习 2:使用 infer 从数组中提取类型
锻炼#ts.m6.l1.e2
尝试:0加载中...
定义一个泛型类型 UnpackArray<T>,它使用 infer 提取数组 T 的元素类型。如果 T 是数组(例如 U[]),则返回 U,否则返回相同类型 T。
正在加载编辑器...
显示提示
使用 T 扩展(推断 U)[] ? U : T 声明并返回推断类型变量 U。
3 次尝试后可用的解决方案