TypeScript-入门(五)-readonly修饰符

66 阅读1分钟

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[]
}