码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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. }

  • 相关阅读:
    Mybatis入门
    sqlite3入门
    数学建模国赛拿奖关键tips,错过这7条可能与国奖无缘!
    Docker Compose快速入门及实战
    掌握这个方法,让工作经验配得上工作时间
    Frp(内网穿透)服务部署
    Android 11.0 禁止二次展开QuickQSPanel设置下拉QSPanel高度
    docker基本管理
    java毕业设计企业售后服务管理系统mybatis+源码+调试部署+系统+数据库+lw
    厨房燃气安全新保障:红外点式可燃气体报警器的作用
  • 原文地址:https://blog.csdn.net/xiaojian044/article/details/128174777
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号