简单聊聊TypeScript只读修饰符


Posted in Javascript onApril 06, 2022

前言

在Typescript 2.0中,引入了readonly关键字,可以对类中的属性进行修饰,作用是:该属性被readonly修饰之后无法修改**(如需修改,在构造函数中可以对只读属性进行修改)**。

我们可以直接在interfacetype中直接使用readonly。

我们来看一个简单的例子:我们定义一个User type

type User={
   readonly  name : string;
   readonly  age  : number
}

我们可以创建一个user,并且初始化一个具体的值。

let user:User={
    name:'搞前端的半夏',
    age:18
}

如果我们去修改age的值,编译器会直接报错。

user.age=19

简单聊聊TypeScript只读修饰符

只读函数参数

在JS中,我们会经常使用const来定义变量,但是const无法保证Object内部的属性不被改变。还是上面的User type,

我们有一个函数接受User type的参数。我们在函数内部修改age属性,编译直接出错。

这样的好处是:我们可以确定这里定义的全局user,无法被改变

let user:User={
    name:'搞前端的半夏',
    age:18
}
UserInfo(user)
function UserInfo(user:User){
    user.age=19
    console.log(user.name,user.age)
}

简单聊聊TypeScript只读修饰符

如何更改函数

只读类属性

readonly修饰符还可以应用在类中声明的属性。这里我们创建了一个User类,具有只读的name和age,请注意这里的name和age是没有初始值的。

class User {
    readonly name: string;
    readonly age: number;
    constructor(name: string, age: number) {
        this.name = name;
        this.age = age;
    }
    UserInfo(user:User){
        console.log(user.name,user.age)
    }
}

我们创建一个user实体,使用new方法创建对象的同时,给name和age添加默认值,由此可以得出结论

在类的constructor中,我们可以修改只读属性的值

name和age是只读的,我们可以获取具体的值。

let user =new User('搞前端的半夏',18)

console.log(user.name)
console.log(user.age)

但是,如果尝试修改name和age的值,会编译出错。

简单聊聊TypeScript只读修饰符

我们尝试在UserInfo中修改name和age:

UserInfo(user:User){
        this.age=20
        console.log(user.name,user.age)
    }

可以看到,编译仍然是错误的!我们可以得出结论

在类中的普通方法 无法 修改 被readonly的属性

简单聊聊TypeScript只读修饰符

只读索引

可以使用readonly来标记索引。例如下面的ReadonlyArray,可以有效的防止给具体的索引分配具体的值。

interface ReadonlyArray<T> {
  readonly length: number;
  // ...
  readonly [n: number]: T;
}

因为是只读的索引,所以下面的赋值操作,会编译出错。

const readonlyArray: ReadonlyArray<number> = [2, 3, 5, 7];
readonlyArray[4] = 11;

简单聊聊TypeScript只读修饰符

总结

readonly是TS类型系统的一部分,它只是一个编译时的工具,TypeScript 代码被编译为 JavaScript,所有的readonly都消失了。所以在运行时没有任何针对属性只读的保护。TS是通过编译器来检查并帮助你编写正确的代码。

例如下面的示例,即使我们的编译器提示有错误,TS仍然可以编译成对应的JS代码,这也完全说明TS只是在编译的阶段,引导我们规范正确的编码

简单聊聊TypeScript只读修饰符

到此这篇关于TypeScript只读修饰符的文章就介绍到这了,更多相关TS只读修饰符内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
javascript:void(0)的真正含义实例分析
Aug 20 Javascript
Lazy Load 延迟加载图片的jQuery插件中文使用文档
Oct 18 Javascript
js+cookies实现悬浮购物车的方法
May 25 Javascript
7个jQuery最佳实践
Jan 12 Javascript
判断是否存在子节点的实现代码
May 18 Javascript
Vue.js实现一个SPA登录页面的过程【推荐】
Apr 29 Javascript
jQuery常见面试题之DOM操作详析
Jul 05 jQuery
基于ajax和jsonp的原生封装(实例)
Oct 16 Javascript
原生JS封装_new函数实现new关键字的功能
Aug 12 Javascript
layer.open关闭父窗口 以及调用父页面的方法
Aug 17 Javascript
JavaScript运行机制实例分析
Apr 11 Javascript
vue中echarts图表大小适应窗口大小且不需要刷新案例
Jul 19 Javascript
关于JS中的作用域中的问题思考分享
JavaScript中的LHS和RHS分析详情
vue中控制mock在开发环境使用,在生产环境禁用方式
Apr 06 #Vue.js
vue3使用vuedraggable实现拖拽功能
vue整合百度地图显示指定地点信息
vue中使用mockjs配置和使用方式
VUE使用draggable实现组件拖拽
Apr 06 #Vue.js
You might like
PHP实现利用MySQL保存session的方法
2014/08/23 PHP
php判断两个日期之间相差多少个月份的方法
2015/06/18 PHP
Thinkphp开发--集成极光推送
2017/09/15 PHP
javascript或asp实现的判断身份证号码是否正确两种验证方法
2009/11/26 Javascript
ASP.NET jQuery 实例14 在ASP.NET form中校验时间范围
2012/02/03 Javascript
JavaScript 判断浏览器是否支持SVG的代码
2013/03/21 Javascript
js取消单选按钮选中示例代码
2013/11/14 Javascript
jQuery提示效果代码分享
2014/11/20 Javascript
使用pjax实现无刷新更改页面url
2015/02/05 Javascript
jQuery制作效果超棒的手风琴折叠菜单
2015/04/03 Javascript
jQuery+HTML5美女瀑布流布局实现方法
2015/09/21 Javascript
ES6新特性一: let和const命令详解
2017/04/20 Javascript
详解node-ccap模块生成captcha验证码
2017/07/01 Javascript
BootStrap Validator 根据条件在JS中添加或移除校验操作
2017/10/12 Javascript
通过一个简单的例子学会vuex与模块化
2017/11/22 Javascript
Vue中v-show添加表达式的问题(判断是否显示)
2018/03/26 Javascript
2分钟实现一个Vue实时直播系统的示例代码
2020/06/05 Javascript
python实现查询苹果手机维修进度
2015/03/16 Python
讲解Python中的标识运算符
2015/05/14 Python
Python中实现三目运算的方法
2015/06/21 Python
用python写个自动SSH登录远程服务器的小工具(实例)
2017/06/17 Python
python opencv旋转图像(保持图像不被裁减)
2018/07/26 Python
Python学习笔记基本数据结构之序列类型list tuple range用法分析
2019/06/08 Python
python 解决cv2绘制中文乱码问题
2019/12/23 Python
Python实现分数序列求和
2020/02/25 Python
深入浅析css3 border-image边框图像详解
2015/11/24 HTML / CSS
Nisbets爱尔兰:英国最大的厨房和餐饮设备供应商
2019/01/26 全球购物
ABOUT YOU匈牙利:500个最受欢迎的时尚品牌
2019/07/19 全球购物
企业办公室主任岗位职责
2014/02/19 职场文书
自愿离婚协议书范文2014
2014/10/12 职场文书
一年级语文上册复习计划
2015/01/17 职场文书
化验室岗位职责
2015/02/14 职场文书
实习护士自荐信
2015/03/25 职场文书
追讨欠款律师函
2015/05/27 职场文书
python使用XPath解析数据爬取起点小说网数据
2021/04/22 Python
Win11 Beta 预览版 22621.575 和 22622.575更新补丁KB5016694发布(附更新内容大全)
2022/08/14 数码科技