|
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'>;
-
(编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|