简单聊聊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 相关文章推荐
浅析Node.js查找字符串功能
Sep 03 Javascript
javascript实现浏览器窗口传递参数的方法
Sep 03 Javascript
javascript 中__proto__和prototype详解
Nov 25 Javascript
Javascript核心读书有感之词法结构
Feb 01 Javascript
JavaScript函数作用域链分析
Feb 13 Javascript
jQuery实现火车票买票城市选择切换功能
Sep 15 jQuery
JS基于正则表达式实现的密码强度验证功能示例
Sep 21 Javascript
使用Vue.js开发微信小程序开源框架mpvue解析
Mar 20 Javascript
JS对象与json字符串相互转换实现方法示例
Jun 14 Javascript
如何使用VuePress搭建一个类型element ui文档
Feb 14 Javascript
Vue在 Nuxt.js 中重定向 404 页面的方法
Apr 23 Javascript
JavaScript Date对象功能与用法学习记录
Apr 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
PHP iconv 解决utf-8和gb2312编码转换问题
2010/04/12 PHP
如何使用PHP实现javascript的escape和unescape函数
2013/06/29 PHP
Laravel向公共模板赋值方法总结
2019/06/25 PHP
thinkphp5.1框架模板布局与模板继承用法分析
2019/07/19 PHP
ThinkPHP 框架实现的读取excel导入数据库操作示例
2020/04/14 PHP
更正确的asp冒泡排序
2007/05/24 Javascript
Javascript+XMLHttpRequest+asp.net无刷新读取数据库数据
2009/08/09 Javascript
jQuery EasyUI API 中文文档 - NumberSpinner数值微调器使用介绍
2011/10/21 Javascript
用函数模板,写一个简单高效的 JSON 查询器的方法介绍
2013/04/17 Javascript
基于JS实现textarea中获取动态剩余字数的方法
2016/05/25 Javascript
JavaScript 随机验证码的生成实例代码
2016/09/22 Javascript
使用jQuery和ajax代替iframe的方法(详解)
2017/04/12 jQuery
JS获取今天是本月第几周、本月共几周、本月有多少天、是今年的第几周、是今年的第几天的示例代码
2018/12/05 Javascript
vue2 拖动排序 vuedraggable组件的实现
2019/08/08 Javascript
[36:17]DOTA2上海特级锦标赛 - VGL音乐会全集
2016/03/06 DOTA
使用python分析git log日志示例
2014/02/27 Python
在Django中创建第一个静态视图
2015/07/15 Python
python中实现精确的浮点数运算详解
2017/11/02 Python
python实现数据预处理之填充缺失值的示例
2017/12/22 Python
Python设计模式之简单工厂模式实例详解
2019/01/22 Python
python3正则提取字符串里的中文实例
2019/01/31 Python
Python HTML解析模块HTMLParser用法分析【爬虫工具】
2019/04/05 Python
Python yield的用法实例分析
2020/03/06 Python
使用Python实现微信拍一拍功能的思路代码
2020/07/09 Python
英国布鲁姆精品店:Bloom Boutique
2018/03/01 全球购物
SNIDEL官网:日本VIVI杂志人气少女第一品牌
2020/03/12 全球购物
查询优化的一般准则有哪些
2015/03/08 面试题
英文自荐信
2013/12/15 职场文书
大学生创业计划书的格式要求
2013/12/29 职场文书
服装行业创业计划书范文
2014/02/05 职场文书
教师一岗双责责任书
2014/04/16 职场文书
取保候审保证书
2014/04/30 职场文书
2015年领导班子工作总结
2015/05/23 职场文书
公司宣传语大全
2015/07/13 职场文书
珍爱生命主题班会
2015/08/13 职场文书
Java 在线考试云平台的实现
2021/11/23 Java/Android