Appearance
Record & Readonly
Readonly
和 Partial 很像只是把 ? 替换成了 Readonly
源码
ts
type Readonly<T> = {
readonly [P in keyof T]: T[P];
};TIP
keyof 是干什么的?
in 是干什么的?
Readonly 是将该属性变为只读
T[P] 是干什么的?
keyof我们讲过很多遍了 将一个接口对象的全部属性取出来变成联合类型in我们可以理解成for in P就是key遍历keyof T就是联合类型的每一项Readonly这个操作就是将每一个属性变成只读T[P]索引访问操作符,与JavaScript种访问属性值的操作类似
Record
源码
ts
type Record<K extends keyof any, T> = {
[P in K]: T;
};TIP
keyof any返回string | number | symbol的联合类型in我们可以理解成for in P就是key遍历keyof any就是string number symbol类型的每一项extends来约束我们的类型T直接返回类型
做到了约束 对象的key 同时约束了 value
示例
ts
type Person = {
name: string,
age: number,
sex: string
}
type A = 1 | 2 | 3
type B = Record<A, Person>
let obj: B = {
1: {name: 'xx', age: 21, sex: '女'},
2: {name: 'xx', age: 21, sex: '女'},
3: {name: 'xx', age: 21, sex: '女'}
}
console.log(obj)