简单聊聊TypeScript只读修饰符

 更新时间:2022年04月06日 16:04:21   作者:半夏的故事  
有的时候我们希望对类成员(属性,方法)进行一定的访问控制,来保证数据的安全,通过类修饰符可以做到这一点,目前typescript提供了四种修饰符,这篇文章主要给大家介绍了关于TypeScript只读修饰符的相关资料,需要的朋友可以参考下

前言

在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

只读函数参数

在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)
}

如何更改函数

只读类属性

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的值,会编译出错。

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

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

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

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

只读索引

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

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

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

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

总结

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

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

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

相关文章

  • 微信小程序实现搜索框功能及踩过的坑

    微信小程序实现搜索框功能及踩过的坑

    这篇文章主要介绍了微信小程序实现搜索框功能及踩过的坑,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • JavaScript制作页面倒计时器的实现

    JavaScript制作页面倒计时器的实现

    这篇文章主要为大家详细介绍了JavaScript制作页面倒计时器的实现,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-03-03
  • IE6下拉框图层问题探讨及解决

    IE6下拉框图层问题探讨及解决

    有关IE6下拉框图层问题,一直困扰着大家,下面有个不错的方法大家可以尝试操作下
    2014-01-01
  • Bootstrap的popover(弹出框)2秒后定时消失的实现代码

    Bootstrap的popover(弹出框)2秒后定时消失的实现代码

    Bootstrap Popover(弹出框)是使用定制的 Jquery 插件创建的。它可以用来显示任何元素的一些信息。这篇文章主要介绍了Bootstrap的popover(弹出框)2秒后定时消失功能,需要的朋友参考下
    2017-02-02
  • Three.Js实现颜色自定义变换效果实例

    Three.Js实现颜色自定义变换效果实例

    这篇文章主要给大家介绍了关于Three.Js实现颜色自定义变换效果的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2023-02-02
  • 深入浅出JSON.parse的实现方法

    深入浅出JSON.parse的实现方法

    众所周知,JSON.parse方法用于将一个json字符串转换成由字符串描述的 JavaScript 值或对象,本文主要为大家介绍了JSON.parse方法的使用,需要的可以参考下
    2024-04-04
  • Javascript多种浏览器兼容写法分析

    Javascript多种浏览器兼容写法分析

    随着以Firefox为代表的第三方浏览器的兴起,我们做的网站也不能再JUST IE了,如果把原来的一些javascript代码放到IE以外的浏览器的话,往往都不能正常运行或出错,所以这里介绍一下怎么改进我们的JS,让它能更加规范,更加具有兼容性。
    2008-09-09
  • webpack教程之webpack.config.js配置文件

    webpack教程之webpack.config.js配置文件

    本篇文章主要介绍了webpack教程之webpack.config.js配置文件 ,具有一定的参考价值,有兴趣的可以了解一席
    2017-07-07
  • 用JS动态设置CSS样式常见方法小结(推荐)

    用JS动态设置CSS样式常见方法小结(推荐)

    本文给大家总结了js动态设置css样式的常见方法,非常实用,对js设置css样式相关知识感兴趣的朋友一起学习吧
    2016-11-11
  • 微信小程序实现人脸识别登陆的示例代码

    微信小程序实现人脸识别登陆的示例代码

    这篇文章主要介绍了微信小程序实现人脸识别登陆的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04

最新评论