| 
                         TypeScript 的复合类型可以分为两类: set 和 map 。set 是指一个无序的、无重复元素的集合。而 map 则和 JS 中的对象一样,是一些没有重复键的键值对。 
- // set 
 - type Size = 'small' | 'default' | 'big' | 'large'; 
 - // map 
 - interface IA { 
 -     a: string 
 -     b: number 
 - } 
 
  
复合类型间的转换
- // map => set 
 - type IAKeys = keyof IA;    // 'a' | 'b' 
 - type IAValues = IA[keyof IA];    // string | number 
 -   
 - // set => map 
 - type SizeMap = { 
 -     [k in Size]: number 
 - } 
 - // 等价于 
 - type SizeMap2 = { 
 -     small: number 
 -     default: number 
 -     big: number 
 -     large: number 
 - } 
 
  
map 上的操作
- // 索引取值 
 - type SubA = IA['a'];    // string     
 -   
 - // 属性修饰符 
 - type Person = { 
 -     age: number 
 -     readonly name: string    // 只读属性,初始化时必须赋值 
 -     nickname?: string    // 可选属性,相当于 | undefined 
 - } 
 
  
映射类型和同态变换
在 TypeScript 中,有以下几种常见的映射类型。它们的共同点是只接受一个传入类型,生成的类型中 key 都来自于 keyof 传入的类型,value 都是传入类型的 value 的变种。 
- type Partial<T> = { [P in keyof T]?: T[P] }    // 将一个map所有属性变为可选的 
 - type Required<T> = { [P in keyof T]-?: T[P] }    // 将一个map所有属性变为必选的 
 - type Readonly<T> = { readonly [P in keyof T]: T[P] }    // 将一个map所有属性变为只读的 
 - type Mutable<T> = { -readonly [P in keyof T]: T[P] }    // ts标准库未包含,将一个map所有属性变为可写的 
 
  
此类变换,在 TS 中被称为同态变换。在进行同态变换时,TS 会先复制一遍传入参数的属性修饰符,再应用定义的变换。 
- interface Fruit { 
 -     readonly name: string 
 -     size: number 
 - } 
 - type PF = Partial<Fruit>;    // PF.name既只读又可选,PF.size只可选 
 
  
其他常用工具类型
由 set 生成 map 
- type Record<K extends keyof any, T> = { [P in K]: T }; 
 -   
 - type Size = 'small' | 'default' | 'big'; 
 - /* 
 - { 
 -     small: number 
 -     default: number 
 -     big: number 
 - } 
 -  */ 
 - type SizeMap = Record<Size, number>; 
 
  
保留 map 的一部分 
- type Pick<T, K extends keyof T> = { [P in K]: T[P] }; 
 - /* 
 - { 
 -     default: number 
 -     big: number 
 - } 
 -  */ 
 - type BiggerSizeMap = Pick<SizeMap, 'default' | 'big'>; 
 -   
 
                          (编辑:91站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |