首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Readonly<T>的TypeScript -可变性和反转

Readonly<T>是TypeScript中的一个内置类型工具,用于创建一个只读(不可修改)的类型。

可变性是指一个对象或数据结构是否可以被修改。在编程中,可变性是一个重要的概念,它影响到代码的安全性、可维护性和可预测性。

反转是指将一个可变的类型转换为只读的类型。在TypeScript中,通过使用Readonly<T>类型工具,可以将一个类型中的所有属性都设置为只读。

使用Readonly<T>可以实现以下效果:

  1. 将对象的属性设置为只读,防止意外的修改。
  2. 在函数参数中使用只读类型,确保函数内部不会修改传入的参数。
  3. 在函数返回值中使用只读类型,确保调用者无法修改返回的值。

下面是一个示例:

代码语言:txt
复制
interface Person {
  name: string;
  age: number;
}

function updatePerson(person: Readonly<Person>): void {
  // person.name = 'John'; // Error: 无法修改只读属性
  // person.age = 30; // Error: 无法修改只读属性
}

const person: Person = { name: 'Alice', age: 25 };
updatePerson(person);

console.log(person.name); // 输出: Alice
console.log(person.age); // 输出: 25

在上面的示例中,我们定义了一个Person接口,并使用Readonly<Person>将其属性设置为只读。然后,我们定义了一个updatePerson函数,该函数接受一个只读的Person对象作为参数。在函数内部,我们试图修改只读属性,但会导致编译错误。最后,我们调用updatePerson函数,并打印出person对象的属性,可以看到它们没有被修改。

推荐的腾讯云相关产品和产品介绍链接地址:

  • 腾讯云函数(云原生、无服务器计算):https://cloud.tencent.com/product/scf
  • 腾讯云数据库(数据库):https://cloud.tencent.com/product/cdb
  • 腾讯云对象存储(存储):https://cloud.tencent.com/product/cos
  • 腾讯云区块链服务(区块链):https://cloud.tencent.com/product/tbaas
  • 腾讯云人工智能(人工智能):https://cloud.tencent.com/product/ai
  • 腾讯云物联网(物联网):https://cloud.tencent.com/product/iotexplorer
  • 腾讯云移动开发(移动开发):https://cloud.tencent.com/product/mobdev
  • 腾讯云音视频服务(音视频):https://cloud.tencent.com/product/tiia
  • 腾讯云安全产品(网络安全):https://cloud.tencent.com/product/ssp
  • 腾讯云服务器(服务器运维):https://cloud.tencent.com/product/cvm
  • 腾讯云网络通信(网络通信):https://cloud.tencent.com/product/cdn
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

readonly disable区别

readonlydisabled它们都能够做到使用户不能够更改表单域中内容。...但是它们之间有着微小差别,总结如下: Readonly只针对input(text / password)textarea有效,而disabled对于所有的表单元素都有效,但是表单元素在使用了...disabled后,当我们将表单以POST或GET方式提交的话,这个元素值不会被传递出去,而readonly会将该值传递出去(readonly接受值更改可以回传,disable接受改但不回传数据)。...如果说在这种情况下用readonly来代替disabled的话,若表单中只有input(text / password)textarea元素,那还是可以,如果存在其他发元素,比如select,用户可以在重新改写值后按回车键进行提交...disabledreadonly这两个属性有一些共同之处,比如都设为true,则form属性将不能被编辑,往往在写js代码时候容易混合使用这两个属性,其实他们之间是有一定区别的: 如果一个输入项

1.4K40

【Rust 基础篇】Rust `Rc<RefCell<T>>` - 共享可变性智能指针

最后,我们打印出了 reference1.data reference2.data 内容。 可变引用内部可变性 在有些情况下,我们需要对 Rc> 中数据进行修改。...Rc> 应用场景 Rc> 在多线程编程递归数据结构中是非常有用。...需要注意是,由于 Rc> 允许运行时可变性检查,这也会增加一定运行时开销。...总结 本篇博客详细介绍了 Rust 中 Rc> 使用方法特性。Rc> 是一种允许多个所有者共享可变数据智能指针,它实现了内部可变性概念。...它在多线程编程递归数据结构中有着广泛应用。 希望本篇博客对你理解应用 Rust 中 Rc> 有所帮助。感谢阅读!

42030

这 5 个 TypeScript 功能特征,你需要熟悉下

你是否正在投入时间来提高你TypeScript技能?你想充分利用它吗?有时,由于没有使用正确 TypeScript 功能并且没有遵循其最佳实践,可能会出现大量代码重复样板。...例如,你可能希望将一个值表示为一对字符串一个数字。” ——TypeScript 文档 最重要一点是这些数组值长度是固定。...让我们看看一些最常见:Omit、Partial、ReadonlyReadonly、Exclude、Extract、NonNullable ReturnType。 让我们看看其中一个再行动。... = { readonly [P in keyof T]: T[P]; } 现在让我们创建我们自定义实用程序以获得乐趣。...让我们反转 Readonly 类型以创建一个 Writable 类型: interface Teacher { readonly name: string; readonly email: string

1.3K40

数栈技术分享:聊聊IOC中依赖注入那些事 (Dependency inject)

,控制反转(IoC)就是常用面向对象编程设计原则,其中依赖注入是控制反转最常用实现。...目标解决当前类不负责被依赖类实例创建和初始化。 Part2: What is Dependency 依赖是程序中常见现象,假设有 AB都被C耦合依赖着,在 OOP 编程中依赖无处不在。...Unit tests 很难写 组件不易复用维护,可扩展性比较低 UserService 不应该承载ApiServiceLoggerService实例创建。...2、如何解决 采用依赖注入,UserService不负责被依赖类创建和销毁,而是通过外部传入apilogger对象方式注入。常见依赖注入方式有三种,本文主要以构造器注入为例解释。...1)Reflect 简介 Proxy 与 Reflect 是 ES6 为了操作对象引入 API,Reflect API Proxy API 一一对应,并且可以函数式实现一些对象操作。

39010

数栈技术分享:聊聊IOC中依赖注入那些事 (Dependency inject)

,控制反转(IoC)就是常用面向对象编程设计原则,其中依赖注入是控制反转最常用实现。...目标解决当前类不负责被依赖类实例创建和初始化。 Part2: What is Dependency 依赖是程序中常见现象,假设有 AB都被C耦合依赖着,在 OOP 编程中依赖无处不在。...Unit tests 很难写 组件不易复用维护,可扩展性比较低 UserService 不应该承载ApiServiceLoggerService实例创建。...2、如何解决 采用依赖注入,UserService不负责被依赖类创建和销毁,而是通过外部传入apilogger对象方式注入。常见依赖注入方式有三种,本文主要以构造器注入为例解释。...1)Reflect 简介 Proxy 与 Reflect 是 ES6 为了操作对象引入 API,Reflect API Proxy API 一一对应,并且可以函数式实现一些对象操作。

61820

C#基本知识点-ReadonlyConst区别

目录 什么是静态常量(Const)动态常量(Readonly) 静态常量(Const)动态常量(Readonly)之间区别 动态常量(Readonly)被赋值后不可以改变 总结 什么是静态常量(Const...)动态常量(Readonly)   先解释下什么是静态常量(Const)以及什么是动态常量(Readonly)。   ...静态常量(Const)动态常量(Readonly)之间区别 静态常量(Compile-time Constant) 动态常量(Runtime Constant) 定义 声明同时要设置常量值。...this.Age = age; this.Age = 25; this.Age = 30; } } 总结   ConstReadonly...Readonly赋值引用类型以后,引用本身不可以改变,但是引用所指向实例值是可以改变。在构造方法中,我们可以多次对Readonly赋值。

1.2K10

Spring控制反转依赖注入

,   从数据库中取出是对象。...简单来说,就是处理对象创建、以及对象依赖关系!...且可以很好其他框架一起使用,      如SpringHibernate,SpringStruts2,其实通俗点讲Spring就是起到一种整合作用,      如是一座桥梁,连接了Hibernate...Struts2;   2.1:控制反转(Inversion of Confrol): 对象创建交给外部容器完成,这个就叫做控制反转   2.2:依赖注入(dependency injection)...:      处理对象依赖关系   2.3:控制反转依赖注入区别:      控制反转:解决对象创建问题[对象创建交给别人即ioc容器];       依赖注入:在创建完对象后,对象关系处理就是依赖注入

715100

extends T ? super T 区别用法

是java泛型中通配符,它代表java中某一个类,那么就代表类型T某个子类,就代表类型T某个父类....那么 代表是左侧小红苹果,红苹果苹果类中某个类,而代表就是苹果水果,好吃,吃类中某个类. 这里要注意是或是代表是范围内某个特定类,而不是范围内所有类....,我们完全可以继续定义个小小红苹果来继承小红苹果,这个继承是没有下限.这个反推出一个结论是一个有上限T类型.那么我们马上就发现实际上是有下限T类型....因为对于有上限T,故我们如果list.get(0)一定返回T或是T子类,这个是确定,得出: List<?....因为是T某个父类,将子类T赋值给父类没任何问题: List<?

1.1K20

TypeScript void undefined 区别

在 JavaScript 中,不返回任何值函数将隐式返回 undefined 值。 但是,在 TypeScript 中 void undefined 不是一回事。...函数 void 返回类型可能会产生一些不寻常但预期行为。 返回类型为 void 上下文类型不会强制函数不返回某些内容。...另一种说法是具有 void 返回类型(类型 vf = () => void)上下文函数类型,在实现时,可以返回任何其他值,但会被忽略。...true; }; const f2: voidFunc = () => true; const f3: voidFunc = function () { return true; }; 这些函数实现体里确实返回了数据...但是我测试发现,这些 voidFunc 函数体内返回数据,仍然可以被消费者接收到: ? ? 这篇帮助文档里介绍不一致: ?

43930

typescriptclassinterface

前言 刚刚vue3.0一发布,各大网址社区以及公众号已经被Vue3.0One Piece版本所霸屏,出现不同标题有着同样内容现象,借此热度我们不如好好回顾一下ts基础知识,备战vue3.0...typescript这个东西说实在,真的是容易忘记,一段时间不用就感觉特别陌生,但是回过头来看看,又有一种熟悉感觉,有句话这么说ts越用越香,它确实能够规范我们书写格式,语法校验类型校验等。...class 首页我们要清楚一点是typescript中类javascript中ES6语法类区别,千万不要混淆。ts中相比于js添加了声明属性类型参数类型以及返回结果类型。...5 and higher需要编译到版本ES5或以上,解决办法:$ tsc xxx.ts -t es5。...提供给子类使用方法属性 abstract class Animal{ public readonly name:string; protected age:number = 38;

1.8K10
领券