简单聊聊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 call 函数的用法说明
Apr 09 Javascript
JQuery魔力之$(&quot;tagName&quot;)与selector
Mar 05 Javascript
JavaScript中字符串分割函数split用法实例
Apr 07 Javascript
详解 javascript中offsetleft属性的用法
Nov 11 Javascript
浅谈js for循环输出i为同一值的问题
Mar 01 Javascript
Angularjs 双向绑定时字符串的转换成数字类型的问题
Jun 12 Javascript
微信小程序 新建登录页并实现tabBar隐藏
Jun 13 Javascript
js中的 || 与 &amp;&amp; 运算符详解
May 24 Javascript
vue-cli 使用axios的操作方法及整合axios的多种方法
Sep 12 Javascript
浅谈webpack+react多页面开发终极架构
Nov 11 Javascript
javascript实现图片轮播代码
Jul 09 Javascript
微信小程序组件生命周期的踩坑记录
Mar 03 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 Pear 安装及使用
2009/03/19 PHP
支付宝服务窗API接口开发php版本
2016/07/20 PHP
PHP实现用户异地登录提醒功能的方法【基于thinkPHP框架】
2018/03/15 PHP
php获得刚插入数据的id 的几种方法总结
2018/05/31 PHP
用JQuery 实现AJAX加载XML并解析的脚本
2009/07/25 Javascript
基于Jquery与WebMethod投票功能实现代码
2011/01/19 Javascript
javascript权威指南 学习笔记之null和undefined
2011/09/25 Javascript
jquery中dom操作和事件的实例学习 下拉框应用
2011/12/01 Javascript
如何设置一定时间内只能发送一次请求
2014/02/28 Javascript
jquery增加和删除元素的方法
2015/01/14 Javascript
Eclipse配置Javascript开发环境图文教程
2015/01/29 Javascript
javascript中scrollTop详解
2015/04/13 Javascript
省市区三级联动下拉框菜单javascript版
2015/08/11 Javascript
漫谈JS引擎的运行机制 你应该知道什么
2016/06/15 Javascript
ES6新特性六:promise对象实例详解
2017/04/21 Javascript
vue开发调试神器vue-devtools使用详解
2017/07/13 Javascript
Angular2+国际化方案(ngx-translate)的示例代码
2017/08/23 Javascript
vue+vant-UI框架实现购物车的复选框全选和反选功能
2019/11/05 Javascript
JavaScript进阶(二)词法作用域与作用域链实例分析
2020/05/09 Javascript
python mysqldb连接数据库
2009/03/16 Python
编写Python脚本批量下载DesktopNexus壁纸的教程
2015/05/06 Python
Python实现数据库编程方法详解
2015/06/09 Python
python实现二叉查找树实例代码
2018/02/08 Python
python如何读写json数据
2018/03/21 Python
Python序列循环移位的3种方法推荐
2018/04/09 Python
浅谈Python采集网页时正则表达式匹配换行符的问题
2018/12/20 Python
python字符串循环左移
2019/03/08 Python
Tensorflow的梯度异步更新示例
2020/01/23 Python
html5唤起app的方法
2017/11/30 HTML / CSS
Perfume’s Club意大利官网:欧洲美妆电商
2019/05/03 全球购物
机械设计及其自动化专业推荐信
2013/10/31 职场文书
2014年维稳工作总结
2014/11/18 职场文书
单位婚育证明范本
2014/11/21 职场文书
CSS3实现的3D隧道效果
2021/04/27 HTML / CSS
vue报错function () { [native code] },无法出现我们想要的内容 Unknown custom element
2022/04/11 Vue.js
JavaScript中reduce()的用法
2022/05/11 Javascript