TypeScript只读函数参数、类属性、索引是怎样的
Admin 2022-09-09 群英技术资讯 859 次浏览
这篇文章主要介绍“TypeScript只读函数参数、类属性、索引是怎样的”,有一些人在TypeScript只读函数参数、类属性、索引是怎样的的问题上存在疑惑,接下来小编就给大家来介绍一下相关的内容,希望对大家解答有帮助,有这个方面学习需要的朋友就继续往下看吧。我们可以直接在interface和type中直接使用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只是在编译的阶段,引导我们规范正确的编码

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要介绍了JavaScript 中的for/of, for/in,在 JavaScript中,for 循环有几种常见的写法,西阿棉文章有写法的详细内容,需要的朋友可以参考一下
这篇文章给大家分享的是vue怎样获取url参数的内容。下面介绍了两种方法,文中示例代码介绍的非常详细,感兴趣的朋友接下来一起跟随小编看看吧。
这篇文章给大家分享的是有关用jquery实现拖拽元素的内容,小编觉得挺实用的,因此分享给大家做个参考。本文要实现的要求的是拖拽且添加元素的功能,接下来一起跟随小编看看怎样写吧。
目录前言框选的实现Group 类的实现小结前言虽然这两个月基金涨的还行,但是离回本还有一大大大段距离????。今天呢,我们要实现的是 canvas 中物体的框选功能,大概就像下面这个样子:然后话不多说,直接开撸 ✍????框选的实现先来说下拖蓝选区(鼠标拖拽区域)的实现方式吧,仔细观察你会发现选区其实就是个普通矩形,这个区域由鼠标
这篇文章主要为大家介绍了react fiber执行原理示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008