Junior #readonly#as-const#immutability#literal-types
readonly, Readonly và `as const` khác nhau thế nào?
⚡ Trả lời nhanh
`readonly` cấm gán lại property/phần tử ở compile time (nông, không bảo vệ runtime). `as const` suy luận kiểu hẹp nhất: literal type, tuple và mọi thứ thành readonly đệ quy. Muốn bất biến thật ở runtime cần `Object.freeze`.
Ví dụ
main.ts · sửa được
readonlytrên property/index signature/mảng (readonly T[],ReadonlyArray<T>).Readonly<T>áp dụng cho mọi key của T, chỉ cấp một.as consttrên object literal: key readonly, giá trị là literal; mảng thành tuple readonly. Dùng cho config, danh sách giá trị để suy ra union.readonly number[]không gán ngược được chonumber[](vì mảng mutable có thêm method ghi).