推荐答案
type ConditionalType<T> = T extends string ? "string" : "not string";
在这个例子中,ConditionalType 是一个条件类型,它根据传入的类型 T 是否继承自 string 类型来决定返回的类型。如果 T 是 string 类型,则返回 "string",否则返回 "not string"。
本题详细解读
条件类型的概念
条件类型(Conditional Types)是 TypeScript 中的一种高级类型,它允许我们根据某个条件来选择不同的类型。条件类型的语法类似于 JavaScript 中的三元表达式,使用 extends 关键字来判断一个类型是否继承自另一个类型。
使用 extends 关键字和三元表达式定义条件类型
条件类型的基本语法如下:
T extends U ? X : Y
T是待检查的类型。U是目标类型。X是当T继承自U时返回的类型。Y是当T不继承自U时返回的类型。
示例 1: 基本条件类型
type IsString<T> = T extends string ? true : false; type A = IsString<"hello">; // true type B = IsString<123>; // false
在这个例子中,IsString 是一个条件类型,它检查 T 是否是 string 类型。如果是,返回 true,否则返回 false。
示例 2: 嵌套条件类型
条件类型可以嵌套使用,以实现更复杂的类型判断。
// www.javascriptcn.com code example
type TypeName<T> =
T extends string ? "string" :
T extends number ? "number" :
T extends boolean ? "boolean" :
"object";
type A = TypeName<"hello">; // "string"
type B = TypeName<42>; // "number"
type C = TypeName<true>; // "boolean"
type D = TypeName<{}>; // "object"在这个例子中,TypeName 是一个嵌套的条件类型,它根据 T 的类型返回相应的字符串。
示例 3: 分布式条件类型
当条件类型作用于联合类型时,TypeScript 会自动将条件类型应用到联合类型的每个成员上,这种特性称为分布式条件类型。
type ToArray<T> = T extends any ? T[] : never; type A = ToArray<string | number>; // string[] | number[]
在这个例子中,ToArray 是一个分布式条件类型,它将联合类型 string | number 转换为 string[] | number[]。
总结
条件类型是 TypeScript 中非常强大的工具,它允许我们根据类型之间的关系来选择不同的类型。通过 extends 关键字和三元表达式,我们可以定义复杂的类型逻辑,从而编写出更加灵活和可维护的类型定义。