Immutability
JavaScript 是有一门多种方式声明您的对象不可变的语言。最常见的方式是
const ——表示某些值不会变。
// 您不可以更改 helloWorld,TypeScript 将会在您试图修改时报错,
因为您同样不能再运行时这样做。
const helloWorld = "Hello World";
// 为什么要关心不变性?很大一部分原因是为了减少代码复杂度。如果您
可以减少可变事物的数量,那么需要跟踪的东西也会随之变少。
使用 const 是很好的第一步,但是使用 object 时这样会失效。
helloWorld = "Hi world";
// myConstantObject 并不是一个常量,因为我们仍然可以更改对象的某些
部分。例如我们可以更改 msg:
const myConstantObject = {
msg: "Hello World",
};
// const 代表该引用的值不变,但对象本身可能在内部发生变化。
我们可以改用 Object.freeze 来实现。
myConstantObject.msg = "Hi World";
// 当一个对象被 “冻结”,之后您将不能改变其内部。TypeScript 将
对这些情况抛出错误:
const myDefinitelyConstantObject = Object.freeze({
msg: "Hello World",
});
// TypeScript 有一些为了改进对不可变数据处理的额外语法,您可以
在这些例子中里看到他们:
example:literals
example:type-widening-and-narrowing
myDefinitelyConstantObject.msg = "Hi World";
// 这对数组同样有效:
const myFrozenArray = Object.freeze(["Hi"]);
myFrozenArray.push("World");
// 使用 freeze 代表您确认这个对象将会保持不变。