• TypeScript26(TS进阶用法Record & Readonly)


    Readonly

    Readonly与我们上一章节学的Partial 很相似,只是把? 替换成了 Readonly

    1. // 源码
    2. type Readonly = {
    3. readonly [P in keyof T]: T[P];
    4. };

    疑问:

    keyof 是干什么的?

    in 是干什么的?

    Readonly 是将该属性变为只读?

    T[P] 是干什么的?

    解答:

    1 keyof:将一个接口对象的全部属性取出来变成联合类型;

    2 in :我们可以理解成for in P 就是key 遍历 keyof T 就是联合类型的每一项;

    3 Readonly :这个操作就是将每一个属性变成只读

    4 T[P] :索引访问操作符,与 JavaScript 种访问属性值的操作类似

    示例代码:

    1. // 源码
    2. type R = {
    3. readonly [P in keyof T]:T[P]
    4. }
    5. // 使用
    6. type Person ={
    7. name:string,
    8. age:number,
    9. text:string
    10. }
    11. type man = R<Person>

    把鼠标移至man上最终的显示如下:

     Record

    源码

    1. type Recordextends keyof any, T> = {
    2. [P in K]: T;
    3. };

    说明

    1 keyof any :返回 string number symbol 的联合类型

    2 in :我们可以理解成for in P 就是key 遍历 keyof any 就是string number symbol类型的每一项

    3 extends:来约束我们的类型

    4 T :直接返回类型

    做到了约束 对象的key 同时约束了 value

    代码示例如下:

    1. // 源码
    2. type Recextends keyof any, T> = {
    3. [P in K]: T
    4. }
    5. // 使用
    6. type Person ={
    7. name:string,
    8. age:number,
    9. text:string
    10. }
    11. // type K = 'A' | 'B' | 'C'
    12. //如果将K换成数字,那么obj:B中的key也必须换成相应的数字
    13. type K = 1 | 2 | 3
    14. type B = RecPerson>
    15. // let obj:B = {
    16. // A:{name:'小剑', age:18, text:'123'},
    17. // B:{name:'小剑', age:19, text:'456'},
    18. // C:{name:'小剑', age:20, text:'789'}
    19. // }
    20. let obj:B = {
    21. 1:{name:'小剑', age:18, text:'123'},
    22. 2:{name:'小剑', age:19, text:'456'},
    23. 3:{name:'小剑', age:20, text:'789'}
    24. }

  • 相关阅读:
    html5 列表/表格标签
    《趣学算法》阅读笔记(二)
    Elasticsearch之文本搜索(十三)
    Java 多线程编程
    harbor部署实录
    mongodb 实现两个集合的关联并分页查询
    网络隔离的办公网和互联网,如何安全地进行数据交换?
    【List篇】LinkedList 详解
    element el-table 设置fixed导致行错乱问题
    canal server 标准化集群搭建(完结)
  • 原文地址:https://blog.csdn.net/xiaojian044/article/details/128174777