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

const与readonly详解

const与readonly详解

大家好,我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天,我们将深入探讨在TypeScript中常用的constreadonly关键字,了解它们的作用、使用场景以及区别。

什么是const与readonly?

在TypeScript中,constreadonly都是用于声明常量或只读变量的关键字,但它们在使用场景和行为上有一些不同之处。

const关键字

const用于声明常量,一旦赋值后就不能再修改。示例代码如下:

const PI = 3.14;
// PI = 3.14159; // Error: Cannot assign to 'PI' because it is a constant.

readonly关键字

readonly用于声明只读属性,可以在声明时或构造函数中初始化,但之后就不能再修改。示例代码如下:

class Circle {readonly radius: number;constructor(radius: number) {this.radius = radius;}// radius cannot be modified in other methods
}

区别与使用场景

  1. const适用于基本数据类型和对象引用: const适用于声明基本数据类型和引用类型的常量,但对于引用类型,只是保证引用地址不变,而非对象的内部属性不变。

    const name: string = "John";
    const person: { age: number } = { age: 25 };// For objects, properties can still be modified
    person.age = 26;
    
  2. readonly适用于类属性和数组: readonly更适用于类的属性和数组,用于确保对象属性或数组元素的不可修改性。

    class Car {readonly brand: string;constructor(brand: string) {this.brand = brand;}
    }const myCar = new Car("Toyota");
    // myCar.brand = "Honda"; // Error: Cannot assign to 'brand' because it is a read-only property.const numbers: readonly number[] = [1, 2, 3];
    // numbers.push(4); // Error: Property 'push' does not exist on type 'readonly number[]'.
    
  3. const是编译时常量,readonly是运行时常量: const是在编译时计算并内联的常量,而readonly是在运行时进行检查的。

    const dynamicValue = Math.random(); // computed at runtime
    const CONST_VALUE = dynamicValue; // Error: Initializer of 'CONST_VALUE' is not a constant expression.
    

注意事项

  1. const的注意事项: 对于复杂对象,const只能保证其引用地址不变,内部属性可变。

  2. readonly的注意事项: readonly适用于类的实例属性和数组,但在一些情况下可能需要使用const辅助。

结语

通过深入了解constreadonly关键字,我们能更灵活地使用它们来保障代码的可维护性和可读性。

相关文章:

const与readonly详解

const与readonly详解 大家好,我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天,我们将深入探讨在TypeScript中常用的const与readonly关键字,了解它…...

ArcGIS Pro 如何计算长度和面积等数据?

要素的几何属性属于比较重要的信息,作为一款专业的GIS软件,ArcGIS Pro自然也是带有计算几何的功能,这里为大家介绍一下计算方法,希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微图中下载的矢量数据,除了矢…...

IntelliJ创建一个springboot工程

安装jdk mac教程 windows教程 安装maven mac教程 windows教程 建议: 在本地磁盘新建一个文件夹叫maven,然后把下载的maven安装到这里。在后续的IntelliJ操作中,配置maven的settings.xml和repository地址为这个目录下的地址。 创建sprin…...

Spark入门02-Spark开发环境配置(idea环境)

安装与配置Spark开发环境 1.下载解压安装包 https://archive.apache.org/dist/spark/spark-2.1.2/ https://mirrors.tuna.tsinghua.edu.cn/apache/spark/spark-3.3.4/ 2、新建Scala项目 参考https://blog.csdn.net/weixin_38383877/article/details/135894760 3、项目中引…...

Codeforces Round 886 (Div. 4)

目录 A. To My Critics B. Ten Words of Wisdom C. Word on the Paper D. Balanced Round E. Cardboard for Pictures F. We Were Both Children G. The Morning Star H. The Third Letter A. To My Critics 直接模拟 void solve(){int a,b,c; cin>>a>>b&…...

Pull模式和Push模式

Pull模式是一种消息消费模式,其中客户端主动从服务端拉取数据。 优点:客户端可以根据自己的消费能力来消费数据,不存在消息堆积的情况。 缺点:消息处理可能不及时,可能存在大量无效请求,客户端需要考虑拉取…...

高端车规MCU的破局之路

目录 1 低质量的无效内卷 2 高端车规MCU产品共性 2.1 支持标定测量 2.2 低延迟通信加速 2.3 完备的网络安全解决方案 2.4虚拟化 3 国产替代的囚徒困境 1 低质量的无效内卷 近几年,车规MCU国产替代的呼声此消彼长,但仍然集中在低端产品。 从产…...

活字格V9获取图片失败bug,报错404,了解存储路径,已改为批量上传和批量获取

项目场景: 问题描述 原因分析: 解决方案: 完成了批量上传功能,这插件真的很方便 于是写了个批量获取附件的js代码,我真厉害 项目场景: 活字格V9版本获取图片链接Upload 【9.0.103.0】图片上传的存储路…...

【Echart】echart图表不显示总结

【Echart】echart图表不显示 经常遇到的场景&#xff1a;v-if和el-tabs切换图表不显示图表&#xff1b; 1、echarts.init时确认dom容器是否设置了宽高&#xff0c;必须设置宽高&#xff1b; 错误写法 <div id"line" ref"lineChart" width"100%&qu…...

vue 组件之间相互传值的6种方法

Vue.js 中组件间通信的方法有很多种&#xff0c;以下是6种常见的直接或间接的组件传值方式&#xff1a; 1. Props&#xff08;父向子&#xff09; 优点&#xff1a; 易于理解&#xff0c;符合单向数据流的原则&#xff0c;有利于代码维护。 缺点&#xff1a; 数据只能从父组件…...

开源大规模分布式MQTT消息服务器EMQX部署教程

1.EMQX是什么&#xff1f; EMQX 是一款开源的大规模分布式 MQTT 消息服务器&#xff0c;功能丰富&#xff0c;专为物联网和实时通信应用而设计。EMQX 5.0 单集群支持 MQTT 并发连接数高达 1 亿条&#xff0c;单服务器的传输与处理吞吐量可达每秒百万级 MQTT 消息&#xff0c;并…...

postgresql慢查询排查和复现

postgresql慢查询排查和复现 一. 介绍一张表&#xff1a;pg_stat_activity pg_stat_activity 是 PostgreSQL 中一个非常有用的系统视图&#xff0c;提供了有关当前数据库连接和活动查询的信息。通过查询这个视图&#xff0c;你可以获取有关正在执行的查询、连接的用户、进程 …...

【服务器】搭建ChatGPT站点常见问题

目录 ❓ 常见问题 &#x1f33c;1. 什么是OpenAI APIkey? &#x1f33c;2. 什么是Token&#xff1f; &#x1f33c;3. 为什么回复不是GPT-4&#xff1f; &#x1f33c;4. 如何区分 GPT-3.5 和 GPT-4 &#x1f33c;5. 为什么回复到一半卡住&#xff1f; &#x1f33c;6.…...

QT+opengl 创建一个六边形

一.关键名词解释 VAO: Vertex Array Object, 顶点数组对象&#xff0c;你要绘制的图形。 VBO:Vertex Buffer Object, 顶点缓冲对象&#xff0c;所有顶点的集合。 EBO:Element Buffer Object, 元素缓冲对象&#xff0c;顶点的索引值。 IBO: Index Buffer Object, 索引缓冲对象。…...

Android imageView.setImageXXX() 引发的卡顿问题

在 Android 开发中&#xff0c;ImageView 是一个用户界面控件&#xff0c;用于在应用中显示图片。它是 Android UI 组件库中一个非常基础和常用的部分。使用 ImageView&#xff0c;你可以在屏幕上显示来自不同来源的图像&#xff0c;比如位图文件、绘图资源 drawable、网络来源…...

MavenGradle等引入jSerialComm

引入 jSerialComm [2.0.0,3.0.0) 此版本发布于 Nov 7, 2023 (23年11月) Maven: <dependency><groupId>com.fazecast</groupId><artifactId>jSerialComm</artifactId><version>[2.0.0,3.0.0)</version> </dependency>Ivy: …...

热门技术问答 | 请 GaussDB 用户查收

近年来&#xff0c;Navicat 与华为云 GaussDB 展开一系列技术合作&#xff0c;为 GaussDB 用户提供面向管理开发工具的生态工具。Navicat 现已完成 GaussDB 主备版&#xff08;单节点、多节点&#xff09;和分布式数据库的多项技术对接。Navicat 通过工具的流畅性和实用性&…...

【C/C++ 01】初级排序算法

排序算法通常是针对数组或链表进行排序&#xff0c;在C语言中&#xff0c;需要手写排序算法完成对数据的排序&#xff0c;排序规则通常为升序或降序&#xff08;本文默认为升序&#xff09;&#xff0c;在C中&#xff0c;<algorithm>头文件中已经封装了基于快排算法的 st…...

Android Settings 显示电池点亮百分比

如题&#xff0c;Android 原生 Settings 里有个 电池电量百分比 的选项&#xff0c;打开后电池电量百分比会显示在状态栏。 基于 Android 13 &#xff0c; 代码在 ./packages/apps/Settings/src/com/android/settings/display/BatteryPercentagePreferenceController.java &am…...

Windows记事本不显示下划线的原因及解决方法

最近使用Windows 记事本敲代码发现一个问题&#xff1a;代码中的下划线无法显示&#xff01;&#xff01;&#xff01;(字体为“微软雅黑”、字体大小为11下&#xff0c;代码中的下划线无法显示。当然每个人情况可能不同) 在 Windows 记事本中&#xff0c;下划线可能会因为 字体…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下&#xff0c;企业和个人创作者为了扩大影响力、提升传播效果&#xff0c;纷纷采用短视频矩阵运营策略&#xff0c;同时管理多个平台、多个账号的内容发布。然而&#xff0c;频繁的文案创作需求让运营者疲于应对&#xff0c;如何高效产出高质量文案成…...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请&#xff0c;不同级别的经理有不同的审批权限&#xff1a; // 抽象处理者&#xff1a;审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

Java求职者面试指南:计算机基础与源码原理深度解析

Java求职者面试指南&#xff1a;计算机基础与源码原理深度解析 第一轮提问&#xff1a;基础概念问题 1. 请解释什么是进程和线程的区别&#xff1f; 面试官&#xff1a;进程是程序的一次执行过程&#xff0c;是系统进行资源分配和调度的基本单位&#xff1b;而线程是进程中的…...

NPOI Excel用OLE对象的形式插入文件附件以及插入图片

static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...

Xela矩阵三轴触觉传感器的工作原理解析与应用场景

Xela矩阵三轴触觉传感器通过先进技术模拟人类触觉感知&#xff0c;帮助设备实现精确的力测量与位移监测。其核心功能基于磁性三维力测量与空间位移测量&#xff0c;能够捕捉多维触觉信息。该传感器的设计不仅提升了触觉感知的精度&#xff0c;还为机器人、医疗设备和制造业的智…...

实战设计模式之模板方法模式

概述 模板方法模式定义了一个操作中的算法骨架&#xff0c;并将某些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的前提下&#xff0c;重新定义算法中的某些步骤。简单来说&#xff0c;就是在一个方法中定义了要执行的步骤顺序或算法框架&#xff0c;但允许子类…...

Linux安全加固:从攻防视角构建系统免疫

Linux安全加固:从攻防视角构建系统免疫 构建坚不可摧的数字堡垒 引言:攻防对抗的新纪元 在日益复杂的网络威胁环境中,Linux系统安全已从被动防御转向主动免疫。2023年全球网络安全报告显示,高级持续性威胁(APT)攻击同比增长65%,平均入侵停留时间缩短至48小时。本章将从…...