</>
⌕
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
  • readonly trê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 const trê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 cho number[] (vì mảng mutable có thêm method ghi).
🃏 Ôn bằng flashcard