1.定义
readonly 是用于创建只读属性或索引签名的关键字。将 readonly 应用于属性或索引签名后,该属性或索引将只能在对象创建时或在类构造函数中被赋值,之后无法修改。
readonly不参与编译结果
2.修饰数组
// 修饰数组时,被修饰的对象任何关于数组被修改的方法都无法使用(如pop、push、下标赋值等)
type N = readonly string[]
let n: N = ['12', '23']
// 但是可以重新赋值,若想无法重新赋值,应该用const定义
// 因为readonly仅针对修饰的对象(目前修饰的是所赋的值,而不是变量本身,所以能重新赋值,但不能修改被赋的值)
n = ['2323']
3.修饰对象属性
3.1 修饰对象为基本类型
// 修饰对象的某个属性(非数组对象时),其值无法修改
type N1 = {
name: string,
readonly age: number
}
let n1: N1 = {
name: '张三',
age: 1212
}
n1.age = 111 // 报错 无法为“age”赋值,因为它是只读属性。
3.2 修饰对象为引用类型
// 修饰对象的某个属性,值为数组类型时,和修饰普通数组一样的效果,可以重新赋值,但无法修改数组本身的内容
type N2 = {
hobby: readonly string[]
}
let n2: N2 = {
hobby: ['游泳', '羽毛球']
}
n2.hobby = ['12']
// 若想要对象的某个属性变成无法重新赋值,且无法修改内容时,可以如下
type N3 = {
readonly hobby: readonly string[]
}