zoukankan      html  css  js  c++  java
  • TS泛型工具

    /**
     * ts泛型工具 内置类型定义
     */
    
    // Partial的作用是将传入的属性变成可选项,原理就是使用keyof拿到所有的属性名,然后在使用in遍历,T[P]拿到相应的值
    type Partial<T> = {[P in keyof T]?: T[P]};
    
    // Required的作用是将传入的属性变为必选项,原理就是使用-?,将可选项的?去掉。与之对应的还有个+?
    type Required<T> = {[P in keyof T]-?: T[P]};
    
    // Readonly的作用是将传入的属性变为只读选项
    type Readonly<T> = {readonly [P in keyof T]: T[P]};
    
    // Pick的作用是从T中取出一系列K的属性
    type Pick<T, K extends keyof T> = { [P in K]: T[P] };
    
    // Record的作用是将K中所有属性的值转化成T类型
    type Record<K extends keyof any, T> = {[P in K]: T};
    
    // Exclude的作用是从T中找出U中没有的元素
    type Exclude<T, U> = T extends U ? never : T;
    
    // Extract的作用是从T中找出U中所有的元素
    type Extract<T, U> = T extends U ? T : never;
    
    // ReturnType的作用是用来得到一个函数的返回值类型
    type ReturnType<T> = T extends (...args: any[]) => infer R ? R : any;
    
    // ThisType用于指定上下文对象类型
    interface ThisType<T> {}
    
    // InstanceType的作用是获取一个类的实例类型,可以用获取到的实例类型来约束一个变量的赋值必须和类的成员类型完全一样才可以
    type InstanceType<T extends new (...args: any[]) => any> = T extends new (...args: any[]) => infer R ? R : any;
    
    // NonNullable的作用是去除 T 中包含的null或者undefined
    type NonNullable<T> = T extends null | undefined ? never : T;
    
    // Parameters的作用是用来获取一个函数的参数类型,而且返回的是只能包含一组类型的数组
    type Parameters<T extends (...args: any[]) => any> = T extends (...args: infer P) => any ? P : never;
    
    // ConstructorParameters的作用是用来获取一个类的构造函数参数类型,并以数组的形式返回
    type ConstructorParameters<T extends new (...args: any[]) => any> = T extends new (...args: infer P) => any ? P : never;
    
    /**
     * ts泛型工具 非内置类型定义
     */
    
    // Omit的作用是忽略对象的某些属性功能
    type Omit<T, K> = Pick<T, Exclude<keyof T, K>>;
    
    // DeepReadonly用来深度遍历 T,并将其所有属性变成只读类型
    type DeepReadonly<T> = { readonly [P in keyof T]: DeepReadonly<T[P]> };
    
    // ConvertNumberToString用来将number转换为string类型
    type ConvertNumberToString<T> = {[K in keyof T]: T[K] extends string ? string : T[K]};
    
    // ValueOf与keyof相对应。取出指定类型的所有 value
    type ValueOf<T> = T[keyof T];
    
    // 用来将所有属性的readonly移除
    type Mutable<T> = { -readonly [P in keyof T]: T[P] };
    以自己现在的努力程度,还没有资格和别人拼天赋
  • 相关阅读:
    2019牛客暑期多校训练营(第六场)
    2019牛客暑期多校训练营(第五场)
    CCPC-Wannafly Summer Camp 2019 全记录
    2018CCPC吉林赛区 | 部分题解 (HDU6555 HDU6556 HDU6559 HDU6561)
    2006-2007 ACM-ICPC | POJ3380 POJ3384 POJ3385 水题题解
    数论专场 Day9 部分题解
    Catenyms (POJ2337) 字典序最小欧拉路
    2019暑训第一场训练赛 |(2016-icpc区域赛)部分题解
    哈尔滨理工大学软件与微电子学院第八届程序设计竞赛同步赛(高年级)B 小乐乐搭积木 (状态压缩)
    牛客练习赛32B Xor Path (树形dp)
  • 原文地址:https://www.cnblogs.com/zhenjianyu/p/15630349.html
Copyright © 2011-2022 走看看