打字稿中的 Object.freeze / Object.seal

2024-02-13

Is Object.freezeTypescript 中建议的还是有其他方法来确保对象保持不可变?

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(使用前将#替换为@)

打字稿中的 Object.freeze / Object.seal 的相关文章

随机推荐