只读修饰符不在编译的结果中。

    1. // 修饰普通成员
    2. interface A {
    3. readonly a: number
    4. }
    5. let aa: A = {
    6. a: 1
    7. }
    8. aa.a = 2 // 这里 ts 会提示错误,因为 a 被设置了只读修饰符,所以 a 的值只可以被赋值一次,不可以更改重新赋值
    9. // 修饰数组对象成员
    10. interface B {
    11. readonly b: number[]
    12. readonly c: readonly number[] // 如果不喜欢数组被重新赋值和修改可以这样写
    13. }
    14. let bb: B = {
    15. b: [1, 2, 3],
    16. c: [1, 2, 3]
    17. }
    18. bb.b = [1, 2, 3, 4] // 这里 ts 会提示错误,因为 a 被设置了只读修饰符,所以 a 的值只可以被赋值一次,不可以更改重新赋值
    19. bb.b.push(4) // 不能重新赋值但是可以对数组进行添加或移除
    20. // 直接修饰一个数组
    21. // 使用 let 声明,数组可以重新赋值但不可更改数组成员
    22. let arr1: readonly number[] = [1, 2, 3]
    23. // 使用 const 声明,数组不可以重新赋值也不可更改数组成员
    24. const arr2: readonly number[] = [1, 2, 3]