typescript 手动实现 Readonly

news/2026/1/21 14:52:29/文章来源:https://www.cnblogs.com/aurora5090/p/19511833

最近游戏开发的时候写出了非常神秘的代码,发现可以用泛型实现 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.mzph.cn/news/1195052.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VMware Harbor 2.10.1 密码忘记重置

-- 第1步:修改harbor_user表的password字段,把长度从40扩容到100,永久生效,核心命令! ALTER TABLE harbor_user ALTER COLUMN password TYPE VARCHAR(100);-- 第2步:执行你原来的密码更新语句,写入你的BCrypt哈…

高纯溶剂品牌深度测评:谁在质量、性价比与售后服务上更胜一筹?

某半导体企业因选用低价高纯溶剂,导致芯片清洗良率骤降 15%,直接损失超 3000 万元;某药企因供应商售后响应迟缓,实验数据异常问题拖延 72 小时,错失新药申报窗口期 —— 高纯溶剂的选择,从来不是 “选贵的” 或 …

2026年翅片管式换热器厂家TOP5测评:全场景适配品牌推荐,华之博成华东地区高要求环境首选

引言:翅片管式换热器进入“高要求场景”竞争新阶段 作为 HVAC 系统末端热能交换的核心设备,翅片管式换热器的性能直接影响建筑环境的稳定性与运营成本。近年来,随着医药、化工、轨道交通等行业对“耐腐蚀性、低维护…

JCJC:一款 API-First 的硬核剪贴板管理工具

JCJC:一款 API-First 的硬核剪贴板管理工具 分享一个我日常高频使用的剪贴板增强工具——JCJC。与传统工具不同,它专注于API 自动化与Markdown 知识流,非常适合开发者和内容创作者。核心特性: ⚡️ API First &am…

2026年UL电机品牌推荐:4家综合实力突出企业,覆盖工业/新能源/家电全场景

一、2026年UL电机市场背景:需求与痛点并存 2026年中国电机市场规模预计达1.5万亿元,同比增长10%,高效节能、智能电机成为增长核心。但用户端仍面临三大核心痛点:68.4%的用户反映长期运行可靠性不足,30-40%的全生命…

塑造2026年的六大软件开发与DevOps趋势

展望2026年,所有这些趋势都指向同一个理念:团队需要用更多的结构化,而非更多的工具,来扩展软件交付。只有当AI、平台、安全、可观测性和成本控制被融入工作方式,而非事后附加时,它们才能真正发挥作用。将这些领域…

深度解析:西门子S7-200 SMART PLC控制16台三菱E740变频器的通讯程序

西门子smart200与16台三菱e700变频器通讯程序 程序目的&#xff1a;西门子s7 200smart 控制16台三菱变频器通讯&#xff0c;通讯稳定&#xff0c;可靠 器件&#xff1a;西门子s7 200 smart的PLC&#xff0c;西门子smart 700 IE V3触摸屏&#xff0c;16台三菱E740变频器 功能&am…

Windows Server核心安全加固指南:十大企业级配置策略全面解析

摘要 安全策略 IP安全策略&#xff0c;简单的来说就是可以通过做相应的策略来达到放行、阻止相关的端口&#xff1b;放行、阻止相关的IP&#xff0c;如何做安全策略&#xff0c;小编为大家详细的写了相关的步骤&#xff1a; 解说步骤&#xff1a; 阻止所有&#xff1a; 打…

PHP数组转JSON时中文变问号?5步精准定位并永久修复编码问题

第一章&#xff1a;PHP数组转JSON时中文乱码问题的根源剖析 在使用PHP将包含中文字符的数组转换为JSON格式时&#xff0c;开发者常遇到输出结果中中文显示为\uXXXX形式的Unicode编码&#xff0c;甚至出现乱码现象。这一问题并非源于PHP本身的缺陷&#xff0c;而是与JSON编码过程…

免费更新的进销存系统源码,源码开源可商用,带完整的搭建部署教程

温馨提示&#xff1a;文末有资源获取方式在当今快节奏的商业环境中&#xff0c;许多中小企业依然受困于手工记账、库存不清、部门协作效率低下等管理难题。这些痛点不仅消耗大量人力物力&#xff0c;更可能因数据不准而导致决策失误&#xff0c;错失市场良机。我们正式推出一套…

机器人五指灵巧手厂商推荐:从性能到服务的全面解析

在人形机器人加速走向工业落地的2026年,末端执行器——尤其是五指灵巧手——已成为决定机器人能否真正“动手”的关键。市场对五指灵巧手厂商的要求,早已超越实验室参数,转向高精度、高可靠性、多场景适配能力以及完…

为什么AutoGLM-Phone连接总失败?ADB调试部署案例详解

为什么AutoGLM-Phone连接总失败&#xff1f;ADB调试部署案例详解 1. Open-AutoGLM&#xff1a;让AI接管你的手机 你有没有想过&#xff0c;有一天只要说一句“帮我打开小红书搜美食”&#xff0c;手机就会自动完成所有操作&#xff1f;这不是科幻&#xff0c;而是Open-AutoGL…

Unity脚本生命周期函数顺序完全指南(含图解+执行优先级设置)

第一章&#xff1a;Unity脚本生命周期函数顺序概述 在Unity中&#xff0c;脚本的执行遵循一套严格的生命周期流程。理解这些函数的调用顺序对于开发稳定、高效的游戏逻辑至关重要。生命周期函数由Unity引擎自动调用&#xff0c;开发者无需手动触发&#xff0c;但必须清楚它们的…

【MySQL安全认证机制深度解析】:彻底搞懂Error 1045背后的密码验证逻辑

第一章&#xff1a;Error 1045错误的本质与背景Error 1045 是 MySQL 数据库系统中常见的访问拒绝错误&#xff0c;全称为 ERROR 1045 (28000): Access denied for user usernamehost (using password: YES/NO)。该错误表明客户端尝试连接 MySQL 服务器时&#xff0c;因身份验证…

W-6D2:电磁炉、多头灶测温之选

在智能家居与高效厨房电器快速发展的当下&#xff0c;精准的温度控制已成为提升用户体验的关键因素之一。W-TRS-6D2(以下简称”W-6D2”)数字红外热电堆传感器——一款专为电磁炉、多头灶等智能厨电设计的高精度测温解决方案。 产品概述 W-6D2作为W-TRS-6Dx系列中的一员&#xf…

2026年广州PLC培训课程排行榜:广州万通PLC培训专业

本榜单依托全维度市场调研与真实行业口碑,深度筛选出五家职业技能培训标杆院校,为有技能提升需求的学子提供客观依据,助力精准匹配适配的学习平台。 TOP1 推荐:广州万通汽车学校 推荐指数:★★★★★ | 口碑评分:…

PHP 8.4 vs 老版本:谁才是高并发场景下的王者?实测数据说话

第一章&#xff1a;PHP 8.4 性能对比旧版本提升概览 PHP 8.4 作为 PHP 语言的最新迭代版本&#xff0c;在性能优化方面带来了显著改进。相较于 PHP 7.4 和 PHP 8.0&#xff0c;新版本通过增强 Zend 引擎、优化内存管理机制以及引入更高效的 JIT&#xff08;Just-In-Time&#x…

想系统入门CTF?这篇就够了:竞赛介绍、学习路线与核心刷题平台详解

CTF&#xff08;Capture The Flag&#xff09;中文一般译作夺旗赛&#xff0c;在网络安全领域中指的是网络安全技术人员之间进行技术竞技的 一种比赛形式。 CTF起源于1996年DEFCON全球黑客大会&#xff0c;以代替之前黑客们通过互相发起真实攻击 进行技术比拼的方式。发展至今&…

Jmeter压力测试详解

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快1、概述一款工具&#xff0c;功能往往是很多的&#xff0c;细枝末节的地方也很多&#xff0c;实际的测试工作中&#xff0c;绝大多数场景会用到的也就是一些核心功…