• 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. }

  • 相关阅读:
    MySQL DDL执行方式-Online DDL介绍
    如果再写for循环,我就锤自己了
    oracle备份脚本
    npm:发布/迭代个人开发包到世界仓库
    Matlab:多变量数据
    小白跟做江科大32单片机之定时器
    学习STM32第十八天
    深度学习 基础硬件CPU GPU知识笔记
    华为HCIE云计算之Fusion Access桌面云
    【附源码】Python计算机毕业设计网络教育平台设计
  • 原文地址:https://blog.csdn.net/xiaojian044/article/details/128174777