曲阜公司网站建设价格便宜,网站建设费与网络维护费区别,湖南 微网站开发与设计比赛,网页开发工具所见即所得条件类型#xff08;Conditional Types#xff09;是一种高级的类型工具#xff0c;它允许我们基于一个类型关系来选择另一个类型。条件类型通常使用条件表达式 T extends U ? X : Y 的形式#xff0c;其中根据泛型类型 T 是否可以赋值给类型 U 来确定最终的类型是 X 还是…条件类型Conditional Types是一种高级的类型工具它允许我们基于一个类型关系来选择另一个类型。条件类型通常使用条件表达式 T extends U ? X : Y 的形式其中根据泛型类型 T 是否可以赋值给类型 U 来确定最终的类型是 X 还是 Y。
type TypeNameT T extends string ? string :T extends number ? number :T extends boolean ? boolean :T extends undefined ? undefined :T extends Function ? function :object;type T1 TypeNamestring; // string
type T2 TypeNamestring[]; // object分布式条件类型Distributive Conditional Types是一种特殊类型的条件类型它在处理联合类型时会表现出特定的行为。当条件类型被应用于联合类型时如果联合类型中包含了带有类型参数的条件类型那么 TypeScript 会自动将条件类型“分发”到联合类型的每个成员上并将结果组合成一个新的联合类型。
// (A | B) extends U ? X : Y
// (A extends U ? X : Y) | (B extends U ? X : Y)type T3 TypeNamestring | string[]; // type T3 string | object可以实现过滤比如 T 中过滤掉 U
// 官方的实现是 ExcludeT, U
type DiffT, U T extends U ? never : T;type T4 Diffa | b | c, a | e; // b | c// Diffa, a | e | Diffb, a | e | Diffc, a | e
// never | b | c
// b | c在做扩展去掉 undefined 跟 null
// 官方的实现是 NonNullableT
type NotNullT DiffT, undefined | null;type T5 NotNullstring | number | undefined | null; // type T5 string | number**Extract 跟 Exclude 相反, Exclude 是从类型 T 中过滤掉可以赋值给类型 U 的类型 Extract 是从类型 T 中可以抽取出赋值给 U 的类型 **
type T6 Extracta | b | c, a | e; // type T6 aReturnTypeT 用于获取函数类型 T 的返回类型
type T7 ReturnType() string; // type T7 stringinfer 用于推断并引入一个类型变量以便在条件类型中使用。
/*** Obtain the return type of a function type*/
type ReturnTypeT extends (...args: any) any T extends (...args: any) infer R ? R : any;