TypeScript 类型编程
一、实现一个 subType 函数,参数只接受对象的子对象
type T = {
name: string
age: number
}
function subType<K extends keyof T>(args: Pick<T, K>) {}
subType({ name: 'tom' })
subType({ name: 'tom', age: 10 })
subType({ name: 'tom', age: 10, gender: 'male' }) // 报错 对象文字可以只指定已知属性,并且“gender”不在类型“Pick<T, keyof T>”中二、下划线字符串转驼峰式
type Underscore<T extends string> = T extends `${infer L}_${infer R}` ? `${L}${Underscore<Capitalize<R>>}` : T
type Result = Underscore<'hello_world_with_types'> // Result 的类型为 'helloWorldWithTypes'三、链式调用
四、对 Readonly 工具类型进行扩展
1、实现一个通用的 PartialReadonly<T, K>
PartialReadonly<T, K>2、实现一个通用的 DeepReadonly<T>
DeepReadonly<T>五、扩展 keyof 实现一个通用的 DeepKeyOf<T>
DeepKeyOf<T>涉及 never 类型的一些特性
六、运用类型编程实现数字累加
1. 实现计数功能
2. 在可以计数的基础上实现两个数字的加法相加
3. 在两个数字相加的基础上实现数字累加
做加法运算的时候怎么保证只接收正整数
七、斐波那契数列
八、二进制数组转化成十进制整数
九、操作函数的参数和返回值类型
1、获取函数参数类型第一项 First 的类型
First 的类型2、获取函数参数类型第一项除外的剩余参数类型
3、实现函数参数和返回值类型的变换
十、把联合类型转化成元组
1. 实现把联合类型转化成交叉类型
2. 利用多个函数的交叉类型是函数重载获取联合类型的最后一项
LastInUnion 是如何获取联合类型的最后一项的?
3. 基于 LastInUnion 实现把联合类型转化为元组
LastInUnion 实现把联合类型转化为元组一些类型编程练习
Last updated