IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> typescript 学习泛型推导心得 -> 正文阅读

[C++知识库]typescript 学习泛型推导心得

export { }
// ts 内置类型 源码分析笔记
type Parameters<T extends ( ...args: any ) => any> = T extends ( ( ...args: infer P ) => any ) ? P : never;
//type Parameters<T> = T extends ( ( ...args: infer P ) => any ) ? P : never; // 简写版
// type ReturnType<T> = T extends ( ( ...args: any ) => infer R ) ? R : never;

function add ( a: number, b: number ): number {
  return a + b;
}
// 获取参数type
type ParametersType = Parameters<typeof add>
//获取返回值type
type ReturnType2 = ReturnType<typeof add>


type ConstructorParameters<T extends new ( ...args: any ) => any> = T extends new ( ...args: infer P ) => any ? P : never;
// type ConstructorParameters<T> = T extends new ( ...args: infer P ) => any ? P : never; // 简写版
class Person {
  constructor ( name: string, age: number ) {

  }
}
// 获取构造函数的参数类型
type paramsType = ConstructorParameters<typeof Person>

type InstanceType<T> = T extends new ( ...args: any ) => infer R ? R : any
const p = new Person( 'xiaocao', 10 )
type instanceType = InstanceType<typeof Person>


type OrTypes<T> = T extends Array<infer P> ? P : never
type Tuple = [ string, number ]
// t1 = string | nuber
type t1 = OrTypes<Tuple>

// 如果是实体则返回any,如果是函数,则返回函数类型,写的有问题,不知道该如果描述实例跟构造函数
// type OrTypes2<T> = T extends ( () => any ) ? any : T extends new ( ...args: any ) => infer R ? R : never
// type t2 = OrTypes2<typeof p>

// 联合推导
type T1 = { name: string }
type T2 = { age: number }
type ToInstance<T> = T extends { a: ( x: infer U ) => void, b: ( x: infer U ) => void } ? U : never
// T3 = T1 & T2
type T3 = ToInstance<{ a: ( x: T1 ) => void, b: ( x: T2 ) => void }>

// 变可选参数
type Partial<T> = {
  [ P in keyof T ]+?: T[ P ]
}
// 深度对象可选项
type DepPartial<T> = {
  [ U in keyof T ]+?: T[ U ] extends object ? DepPartial<T[ U ]> : T[ U ]
}
// Required<T> 必选项 

type Required<T> = {
  // -? 不可选 +?可选(可忽略)
  [ P in keyof T ]-?: T[ P ]
}
// 可选项变成必选项
 
type DepRequired<T> = {
  [ U in keyof T ]-?: T[ U ] extends object ? DepRequired<T[ U ]> : T[ U ]
}



//  
type Readonly<T> = {
  readonly [ P in keyof T ]?: T[ P ]
}
type SetDiff<A, B> = A extends B ? never : A
type getSame<A, B> = A extends B ? A : never
// type Extract<T, U> = T extends U ? T : never;
type ReadonlySome<T extends any, U extends any> = {
  readonly [ P in getSame<keyof T, keyof U> ]: T[ P ]
}

type Pick<T, K extends keyof T> = {
  [ P in K ]: T[ P ];
};
interface Dog {
  name: string
  kind: string
  age: number
}
interface Animal {
  name: string
  kind1: boolean
}

// Pick 摘取某一些返回

type a1 = Extract<keyof Animal, keyof Dog>
type d1 = getSame<Animal, Dog>
type a = ReadonlySome<Animal, Dog>

// 过滤掉某些属性
type Omit<T, K extends keyof any> = {
  [ P in SetDiff<keyof T, K> ]: T[ P ]
}
type oo1 = Omit2<Dog, 'age'>
type Omit2<T, K extends keyof any> = Pick<T, SetDiff<keyof T, K>>
type oo2 = Omit2<Dog, 'age'>

// type Omit3<T, K extends keyof any> = ( T, K ) => Pick<T, SetDiff<keyof T, K>>

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-10 10:40:43  更:2021-09-10 10:42:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 20:33:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码