javascript - typescript 中的 Object.freeze/Object.seal

标签 javascript typescript

Object.freeze 是在 Typescript 中建议的还是有其他方法可以确保对象保持不可变?

因为 const 只保护实例,而不保护属性,这显然不是我要找的答案。

最佳答案

is there other way of making sure object remains immutable?

这取决于您想要的保险级别。

如果您想确保任何消费者(无论是 TypeScript 还是 JavaScript 代码)都可以在运行时修改对象属性,Object.freeze 是实现此目的的方法。

如果编译时检查足够,例如当所有消费者代码都保证是 TypeScript-only 和类型检查时,您可以使用 ReadOnly generic type , 它采用对象类型并使所有 properties readonly .事实上,Object.freeze() 是在 library type definitions 中声明的作为返回 ReadOnly - 其参数的修改类型:

freeze<T>(o: T): Readonly<T>;

对于seal,类型系统中没有办法表示密封的对象,Object.seal()declared to return the same type it receives :

seal<T>(o: T): T;

Object.seal() 是唯一的出路。

关于javascript - typescript 中的 Object.freeze/Object.seal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48629868/

相关文章:

javascript - 即使具有相同的数据类型,也无法使用数据属性扩展 Typescript 中的接口(interface)

javascript - 借助 TypeScript 在旧版浏览器中使用 Angular 2?

java - 警告消息/弹出日期/时间

javascript - 检查新用户

javascript - 将十六进制字符串转换为字节数组

angular - 数字计数器上的 ionic 3 Angular 动画

javascript - 在 typescript 中选择接受字符串或数组的函数

javascript - knockoutjs 调用不断执行,我怎样才能只调用一次?

javascript - ||和 javascript 中的 onmessage

javascript - 如何使用 Typescript 映射进行 ElasticSearch 响应?