返回

TS如何给对象某指定属性加上readonly?

前端

前言

在Typescript中,内置工具类型Readonly可以给一个对象的所有属性都加上readonly,从而实现只读属性。但是,如果我们只想给对象的部分属性加上只读关键字,该怎么办呢?

使用Readonly类型

我们可以使用Readonly类型来给对象的部分属性加上只读关键字。Readonly类型可以将一个类型的属性都标记为只读。例如,我们可以使用以下代码给对象personnameage属性加上只读

type Person = {
  name: string;
  age: number;
};

const person: Readonly<Person> = {
  name: "John",
  age: 30
};

现在,我们就可以放心地使用对象person了,而不必担心会意外修改它的属性。例如,以下代码就会报错:

person.name = "Mary"; // Error: Cannot assign to 'name' because it is a read-only property.

使用ReadonlyArray类型

ReadonlyArray类型可以将一个数组类型的元素都标记为只读。例如,我们可以使用以下代码给数组numbers的元素加上只读关键字:

const numbers: ReadonlyArray<number> = [1, 2, 3];

现在,我们就可以放心地使用数组numbers了,而不必担心会意外修改它的元素。例如,以下代码就会报错:

numbers[0] = 4; // Error: Cannot assign to '0' because it is a read-only property.

使用ReadonlyMap类型

ReadonlyMap类型可以将一个Map类型的键和值都标记为只读。例如,我们可以使用以下代码给Mapmap的键和值加上只读关键字:

const map: ReadonlyMap<string, number> = new Map([
  ["name", "John"],
  ["age", 30]
]);

现在,我们就可以放心地使用Mapmap了,而不必担心会意外修改它的键和值。例如,以下代码就会报错:

map.set("name", "Mary"); // Error: Cannot set 'name' because it is a read-only property.

总结

在Typescript中,我们可以使用Readonly类型、ReadonlyArray类型和ReadonlyMap类型来给对象、数组和Map的属性、元素和键值加上只读关键字。这可以帮助我们防止意外修改对象、数组和Map的属性、元素和键值,从而提高代码的安全性。