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/