Extract type高级类型-TS内置泛型约束

67 阅读1分钟

基本语法

定律:子类 extends 父类 ===》 返回true,返回T类型

语法: type Extract<T,U> = T extends U ? T : never

父子类使用

class People {
    public name!:string
    public age!:number
    public address!:string
    eat(){}
}
class ChinesePeople extends People{}

let cp = new ChinesePeople()

//Extract 在子类和父类中的应用
type ext = Extract<ChinesePeople,People>
// 返回的是 ChinesePeople 子类

联合类型使用

type unionType = Extract<string | number,number>
//分解判断
//第一次:string extends number ? T : never 结果 never
//第二次:number extends number ? T : never 结果 number

函数类型使用

type func1 = (one:number,two:string) => string
type func2 = (one:number) => string

type ext1 = Extract<func1,func2> //返回 never
type ext2 = Extract<func2,func1> //返回 (one:number) => string

函数泛型约束: 函数类型上的泛型约束,参数类型和返回值完全相同的情况下,参数少的函数类型 extends 参数多的函数类型 返回true