映射类型:属于ts高级类型,映射类型提供从旧类型中创建新类型的方式。在映射类型中,新类型用相同的方式转换旧类型的每个属性。
条件类型:和映射类型类似,也是在一个类型基础上,执行某些条件操作,形成的新类型。
概念比较绕,不好理解,看例子:
已经被记录在标准库的一些常用的工具函数Record,Partial,Pick,Readonly,还有通过infer(后面介绍)实现的ReturnType都是映射类型。
实现方法如下:
1.Record
//实现
type Record<[T extends keyof any],K> = {
[P in T ]: K
}
// 测试用例
type Names = 'USA' | 'CHINA' | 'JAP'
interface country { name: string space: number }
type Countries = Record<Names, country>
// expect: Countries = { USA: country; CHINA: country; JAP: country }
2. Partial
//实现
type Partial<T> = {
[K in keyof T ]?: T[K]
}
// 测试用例
interface Colors {
yellow: string
red: string
black: string
}
type selectedColor