Is Object.freeze
Typescript 中建议的还是有其他方法来确保对象保持不可变?
Since const
仅保护实例,但不保护属性,这显然不是我正在寻找的答案。
还有其他方法可以确保对象保持不可变吗?
这取决于您想要的保险级别。
如果您想确保任何使用者(无论是 TypeScript 还是 JavaScript 代码)都可以在运行时修改对象属性,Object.freeze
就是这样做的方法。
如果编译时检查足够,例如当所有消费者代码都保证仅是 TypeScript 并经过类型检查时,您可以使用ReadOnly泛型 https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-1.html#partial-readonly-record-and-pick,它采用对象类型并使所有特性readonly https://www.typescriptlang.org/docs/handbook/interfaces.html#readonly-properties。实际上,Object.freeze()
声明于库类型定义 https://github.com/Microsoft/TypeScript/blob/master/src/lib/es5.d.ts#L201作为返回ReadOnly
- 其参数的修改类型:
freeze<T>(o: T): Readonly<T>;
For seal
,没有办法在类型系统中表示密封对象,Object.seal()
is 声明返回与接收到的类型相同的类型 https://github.com/Microsoft/TypeScript/blob/master/src/lib/es5.d.ts#L183:
seal<T>(o: T): T;
and Object.seal()
是唯一的出路。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)