简单聊聊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 相关文章推荐
js实现全屏漂浮广告移入光标停止移动
Dec 02 Javascript
javascript中数组的多种定义方法和常用函数简介
May 09 Javascript
js控制当再次点击按钮时的间隔时间
Jun 03 Javascript
jquery判断输入密码两次是否相等
Apr 22 Javascript
AngularJS指令详解及示例代码
Aug 16 Javascript
让编辑器支持word复制黏贴、截屏的js代码
Oct 17 Javascript
浅谈Vue路由快照实现思路及其问题
Jun 07 Javascript
AngularJs的UI组件ui-Bootstrap之Tooltip和Popover
Jul 13 Javascript
swiper.js插件实现pc端文本上下滑动功能示例
Dec 03 Javascript
实现一个 Vue 吸顶锚点组件方法
Jul 10 Javascript
JavaScript实现前端网页版倒计时
Mar 24 Javascript
React Native项目框架搭建的一些心得体会
May 28 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
搜索和替换文件或目录的一个好类--很实用
2006/10/09 PHP
PHP setcookie设置Cookie用法(及设置无效的问题)
2011/07/13 PHP
PHP文章按日期(月日)SQL归档语句
2012/11/29 PHP
使用php实现下载生成某链接快捷方式的解决方法
2013/05/07 PHP
php将gd生成的图片缓存到memcache的小例子
2013/06/05 PHP
新浪SAE云平台下使用codeigniter的数据库配置
2014/06/12 PHP
php中magic_quotes_gpc对unserialize的影响分析
2014/12/16 PHP
Thinkphp5.0自动生成模块及目录的方法详解
2017/04/17 PHP
广告显示判断
2006/08/31 Javascript
漂亮的widgets,支持换肤和后期开发新皮肤
2007/04/23 Javascript
简单几行JS Code实现IE邮件转发新浪微博
2013/07/03 Javascript
JQuery与JS里submit()的区别示例介绍
2014/02/17 Javascript
JSONP跨域的原理解析及其实现介绍
2014/03/22 Javascript
jquery 设置style:display的方法
2015/01/29 Javascript
深入理解JavaScript系列(44):设计模式之桥接模式详解
2015/03/04 Javascript
VC调用javascript的几种方法(推荐)
2016/08/09 Javascript
JavaScript编程设计模式之构造器模式实例分析
2017/10/25 Javascript
vue-router传参用法详解
2019/01/19 Javascript
Vue将页面导出为图片或者PDF
2020/08/17 Javascript
原生JS与CSS实现软件卸载对话框功能
2019/12/05 Javascript
js实现抽奖的两种方法
2020/03/19 Javascript
vue中echarts引入中国地图的案例
2020/07/28 Javascript
Python实现获取磁盘剩余空间的2种方法
2017/06/07 Python
VPS CENTOS 上配置python,mysql,nginx,uwsgi,django的方法详解
2019/07/01 Python
H5页面适配iPhoneX(就是那么简单)
2019/12/02 HTML / CSS
鼠标滚轮事件和Mac触控板双指事件
2019/12/23 HTML / CSS
Etam艾格英国官网:法国著名女装品牌
2019/04/15 全球购物
小学生自我评价100字(15篇)
2014/09/18 职场文书
写景作文评语集锦
2014/12/25 职场文书
导游词开场白
2015/01/31 职场文书
销售经理工作检讨书
2015/02/19 职场文书
幼儿园教师安全责任书
2015/05/08 职场文书
2015年社区国庆节活动总结
2015/07/30 职场文书
写给同事的离职感言
2015/08/04 职场文书
2016年推广普通话宣传周活动总结
2016/04/06 职场文书
Java面试题冲刺第十五天--设计模式
2021/08/07 面试题