映射类型
基于就类型创建新类型(对象类型)
映射类型十基于索引签名类型的,所以,该语法类似于索引签名类型,也使用[ ]
key in PropKeys 表示key可以是PropKeys联合类型中的任意一个,类似于for in
注: 映射类型只能在类型别名中使用们不能在接口中使用
type PropsKeys = 'a' | 'b' | 'c'
// interface Type1 {
// [Key in PropsKeys]:number //映射类型只能在类型别名中使用们不能在接口中使用
// }
type Type2 = {
[Key in PropsKeys]: number
}
/**
* type Type2 = {
* a: number;
* b: number;
* c: number;
* }
*/
映射类型除了根据联合类型创建新类型外,还可以根据对象类型来创建
keyof 获取对象类型中的key
type PropsKeys1 = {
label: string
value: number
}
type Type3 = {
[Key in keyof PropsKeys1]: number
}
/**
* type Type3 = {
* label: number;
* value: number;
* }
*/
Partial的实现方式
基于映射类型实现的
T[P] 表似乎获取T中每个键对应的类型
type Partial<T> = {
[P in keyof T]?: T[P];
};
索引查询(访问)类型
索引查询(访问)类型
用来查询属性的类型
T[key]
type Props4 = {
name: string
age: number
}
// Props4['age'] // 直接这么写是不可以的,这样表示有一个对象叫做Props4 实际需要的是他的类型
let myAge: Props4['age'] = 18
同时查询多个索引的类型
注:如果其中有相同类型 那么会自动去重
type Props5 = {
a: number
b: string
c: boolean
}
let mp11: Props5['a' | 'b'] //let mp11: string | number
let mp22: Props5[keyof Props5] //let mp22: string | number | boolean
// keyof Props5 = 'a' | 'b' | 'c'