• Ts内置类型---下


    上文介绍了一些内置类型的作用,此文介绍一下剩余的类型

    Parameters

    作用

    Parameters 从 函数类型T中使用的参数类型 构造元组类型

    实现

    现在在有条件类型的 extends 子语句中,允许出现 infer 声明,它会引入一个待推断的类型变量。 这个推断的类型变量可以在有条件类型的 true 分支中被引用。 允许出现多个同类型变量的 infer。

    type Parameters any> = T extends (...args: infer P) => any ? P : never
    
    • 1

    使用

    type Exp13 = (title:string,age:number)=>void;
    type ParametersExp13 = Parameters
    
    • 1
    • 2

    结果:

    type ParametersExp13 = [title: string, age: number]
    
    • 1

    ConstructorParameters

    作用

    ConstructorParameters 从构造函数的参数类型来构造元组类型

    实现

    type ConstructorParameters any> = T extends abstract new (...args: infer P) => any ? P : never
    
    • 1

    使用

    interface Exp14 {
        new(title:string,age:number):Object
    }
    type ConstructorParametersExp14 = ConstructorParameters
    
    • 1
    • 2
    • 3
    • 4

    结果为:

    type ConstructorParametersExp14 = [title: string, age: number]
    
    • 1

    ReturnType

    作用

    ReturnType 构造一个由函数类型 T返回类型组成的类型

    实现

    type ReturnType any> = T extends (...args: any) => infer R ? R : any
    
    • 1

    使用

    type Exp15 = (title:string,age:number) => string| number;
    type ReturnTypeExp15 = ReturnType
    
    • 1
    • 2

    结果:

    type ReturnTypeExp15 = string | number
    
    • 1

    InstanceType

    作用

    InstanceType 返回由T中构造函数的实例组成的类型

    实现

    type InstanceType any> = T extends abstract new (...args: any) => infer R ? R : any
    
    • 1

    使用

    interface Exp17{
      title:string;
      age:number
    }
    interface Exp16  {
        new(title:string,age:number):Exp17;
    }
    type InstanceTypeExp16 =  InstanceType
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    结果

    type InstanceTypeExp16 = Exp17
    
    • 1

    ThisParameterType

    作用

    ThisParameterType 返回T函数类型中this参数的类型,无返回unkonwn

    实现

    type ThisParameterType = T extends (this: infer U, ...args: never) => any ? U : unknown
    
    • 1

    使用

    // 声明
    type Exp18 = (this:number)=>number;
    type ThisParameterTypeExp18 = ThisParameterType
    // 未声明
    type Exp181 = (age:number)=>number;
    type ThisParameterTypeExp181 = ThisParameterType
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    结果:

    // 声明
    type ThisParameterTypeExp18 = number
    // 未声明
    type ThisParameterTypeExp181 = unknown
    
    • 1
    • 2
    • 3
    • 4

    OmitThisParameter

    作用

    OmitThisParameter 从 T函数类型中移除this参数 如果不存在 返回T 存在这创建一个不带此参数的新函数类型

    实现

    type OmitThisParameter = unknown extends ThisParameterType ? T : T extends (...args: infer A) => infer R ? (...args: A) => R : T
    
    • 1

    使用

    type Exp19 = (this:number,age:number,title:string)=>number;
    type OmitThisParameterExp19 = OmitThisParameter
    
    • 1
    • 2

    结果:

    type OmitThisParameterExp19 = (age: number, title: string) => number
    
    • 1

    ThisType

    作用

    ThisType 在对象字面量中键入this 为Type,并可以通过上下文类型控制this类型

    实现

    使用限制:

    • 在–noImplicitThis的选项下起效
    • 仅支持在对象字面量上下文中使用,在其他地方使用相当于空接口
    interface ThisType
    
    • 1

    使用

    type Exp20 = {bar:()=>void}
    type ThisTypeExp20 = Exp20 & ThisType<{title:string}>
    const Exp20: ThisTypeExp20 = {
        bar() {
             console.log(this.title); 
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    结果:

    this: {
        title: string;
    }
    
    • 1
    • 2
    • 3

    Uppercase & Lowercase

    作用

    将StringType转为全大写/小写,ts通过内置关键字intrinsic在编译器实现

    实现

    type Uppercase = intrinsic
    type Lowercase = intrinsic
    
    • 1
    • 2

    使用

    // Uppercase
    type Exp21 = 'titLe';
    type UppercaseExp21 = Uppercase
    
    // Lowercase
    type Exp22 = 'TiTLE';
    type LowercaseExp22 = Lowercase
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    结果:

    type UppercaseExp21 = "TITLE"
    type LowercaseExp22 = "title"
    
    • 1
    • 2

    Capitalize & Uncapitalize

    作用

    将 string type 首字母转为大写/小写,通过关键字 intrinsic编译阶段实现

    实现

    type Capitalize = intrinsic
    type Uncapitalize = intrinsic
    
    • 1
    • 2

    使用

    //Capitalize
    type Exp23  = 'title';
    type CapitalizeExp23 = Capitalize
    
    // Uncapitalize
    type Exp24 = 'Title'
    type UncapitalizeExp24 = Uncapitalize
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    结果:

    type CapitalizeExp23 = "Title"
    type UncapitalizeExp24 = "title"
    
    • 1
    • 2
  • 相关阅读:
    Docker容器之Consul部署
    mac vscode没有写入权限/无法自动更新
    真的,Java并发编程基础入门看这个就够了
    Java并发-操作系统,进程,线程,并行并发?
    云上亚运:所使用的高新技术,你知道吗?
    LabVIEW安装了哪些版本的LabVIEW运行引擎
    Kingbase备份与还原及表的约束(Kylin)
    Github学生认证
    2023年9月青少年机器人技术(三级)等级考试试卷-理论综合
    OpenCV实战(1)——OpenCV与图像处理基础
  • 原文地址:https://blog.csdn.net/qq_39692513/article/details/127615428