简单聊聊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技术-屏蔽类
Aug 15 Javascript
用cookies实现的可记忆的样式切换效果代码下载
Dec 24 Javascript
JavaScript之HTMLCollection接口代码
Apr 27 Javascript
js操作textarea 常用方法总结
Dec 03 Javascript
Jquery取得iframe下内容的方法
Nov 18 Javascript
DOM基础教程之使用DOM控制表单
Jan 20 Javascript
js基于面向对象实现网页TAB选项卡菜单效果代码
Sep 09 Javascript
微信小程序 弹幕功能简单实例
Feb 14 Javascript
react实现pure render时bind(this)隐患需注意!
Mar 09 Javascript
boostrap模态框二次弹出清空原有内容的方法
Aug 10 Javascript
详解如何在Vue里建立长按指令
Aug 20 Javascript
ES6箭头函数和扩展实例分析
May 23 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
新的一年,新的期待:DC在2020年的四部动画电影
2020/01/01 欧美动漫
PHP编码规范-php coding standard
2007/03/16 PHP
php array_intersect()函数使用代码
2009/01/14 PHP
php 变量未定义等错误的解决方法
2011/01/12 PHP
使用HMAC-SHA1签名方法详解
2013/06/26 PHP
php等比例缩放图片及剪切图片代码分享
2016/02/13 PHP
CodeIgniter整合Smarty的方法详解
2017/08/25 PHP
JS trim去空格的最佳实践
2011/10/30 Javascript
JS实现仿QQ聊天窗口抖动特效
2015/05/10 Javascript
jquery采用oop模式class类的使用示例
2016/01/22 Javascript
JQuery ztree 异步加载实例讲解
2016/02/25 Javascript
js创建jsonArray传输至后台及后台全面解析
2016/04/11 Javascript
jQuery图片轮播(二)利用构造函数和原型创建对象以实现继承
2016/12/06 Javascript
在JS中a标签加入单击事件屏蔽href跳转页面
2016/12/16 Javascript
Javascript中return的使用与闭包详解
2017/01/11 Javascript
bootstrap table 数据表格行内修改的实现代码
2017/02/13 Javascript
nodejs 日志模块winston的使用方法
2018/05/02 NodeJs
[01:06] DOTA2英雄背景故事第三期之秩序法则光之守卫
2020/07/07 DOTA
跟老齐学Python之重回函数
2014/10/10 Python
Python连接SQLServer2000的方法详解
2017/04/19 Python
Python配置mysql的教程(推荐)
2017/10/13 Python
解决python 输出是省略号的问题
2018/04/19 Python
python分批定量读取文件内容,输出到不同文件中的方法
2018/12/08 Python
在PyCharm导航区中打开多个Project的关闭方法
2019/01/17 Python
Python3.6实现带有简单界面的有道翻译小程序
2019/04/16 Python
python如何将多个PDF进行合并
2019/08/13 Python
Python 异常的捕获、异常的传递与主动抛出异常操作示例
2019/09/23 Python
Python搭建代理IP池实现接口设置与整体调度
2019/10/27 Python
浅谈对pytroch中torch.autograd.backward的思考
2019/12/27 Python
如何在pycharm中安装第三方包
2020/10/27 Python
moosejaw旗下的户外商品促销网站:Mountain Steals
2017/02/27 全球购物
重新定义牛仔布,100美元以下:Warp + Weft
2018/07/25 全球购物
少年派的奇幻漂流观后感
2015/06/08 职场文书
女方家长婚礼答谢词
2015/09/29 职场文书
深入解析MySQL索引数据结构
2021/10/16 MySQL
MySQL详解进行JDBC编程与增删改查方法
2022/06/16 MySQL