当前位置: 首页 > news >正文

typescript 手动实现 Readonly

最近游戏开发的时候写出了非常神秘的代码,发现可以用泛型实现 Readonly(虽然 ts 自带这个语法糖)

这个是我的类型

type TGameData = Record<string, any>;type Condition = <T extends TGameData>(this: T) => string;

然后期望用户代码是这样的。

const cond: Condition = function () {  if (this.a > 10) return "a";if (this.b > 10) return "b";if (this.x > 12) {this.x = 1;}return "c";
};

这里 this.x = 1 会报错,提示 Property 'x' does not exist on type 'T'.ts(2339)

原因

为什么可以读(认为属性存在),但是不能写呢?这个是因为 T 的限制。

any 会绕过类型检查,所以读的时候肯定没有问题,这点毫无疑问。

而写的时候,对象的属性 x 可能是 readonly 或者 [[get]],这样的对象也满足 any 的条件,所以 ts 会禁止你写入,哪怕你对 TGameData & { x 字面量 } 提升 x 的检查,也无法绕过。

用户绕过

如果用户确实是需要副作用,可以手动

const self = this as any;

这个和我的场景确实完全符合,相当于是要用户自己手动确认。

http://www.jsqmd.com/news/279123/

相关文章:

  • VMware Harbor 2.10.1 密码忘记重置
  • 高纯溶剂品牌深度测评:谁在质量、性价比与售后服务上更胜一筹?
  • 2222
  • 深度解析:西门子S7-200 SMART PLC控制16台三菱E740变频器的通讯程序
  • R语言读取CSV中文乱码自救手册(仅限内部流传):3个鲜为人知的编码调试技巧
  • Windows Server核心安全加固指南:十大企业级配置策略全面解析
  • PHP数组转JSON时中文变问号?5步精准定位并永久修复编码问题
  • 免费更新的进销存系统源码,源码开源可商用,带完整的搭建部署教程
  • 机器人五指灵巧手厂商推荐:从性能到服务的全面解析
  • 想系统入门CTF?这篇就够了:竞赛介绍、学习路线与核心刷题平台详解
  • Unity脚本生命周期函数顺序完全指南(含图解+执行优先级设置)
  • 【MySQL安全认证机制深度解析】:彻底搞懂Error 1045背后的密码验证逻辑
  • W-6D2:电磁炉、多头灶测温之选
  • 2026年盒马鲜生卡回收四种典型方式
  • 2026年广州PLC培训课程排行榜:广州万通PLC培训专业
  • 【Unity脚本生命周期深度解析】:C#中Awake、Start、Update执行顺序全揭秘
  • 高精度、耐腐蚀、可定制——玻璃转子流量计优质厂商全解析
  • 2026年普拉提教练培训机构哪家值得选择去哪学
  • [工程实战] 攻克“资料孤岛”:基于隐语纵向联邦学习的金融风控建模全解析
  • 总结浙江地区口碑好的成人自考培训机构,春华教育排名如何?
  • 吴忠市英语雅思培训辅导机构推荐、2026权威出国雅思课程中心学校口碑排行榜
  • 分享专业生产菱形钢板网厂家,中盛制网口碑怎么样?
  • 汇聚行业方案,共话行业趋势。2026北京数据中心智算中心展共启智算产业新篇
  • 2026南京婚纱摄影全品牌星级权威榜单:七大维度甄选 三梯度精准适配新人需求
  • 2026年湖南品牌营销策划服务商综合评估:六家顶尖公司深度解析
  • 布氏硬度计谁家的技术实力强?国内外实力厂商top榜出炉!
  • 柔性抓取新时代:值得关注的自适应夹爪品牌推荐
  • 聊聊2026年售后完善的红色教育馆布展品牌企业,盛世笔特值得关注
  • 上海靠谱的长期自驾租车企业怎么选择?
  • 2026年健身培训学院怎么选教练班培训更靠谱