Các modifier thuộc tính này kiểm soát việc một thuộc tính có bắt buộc hay không và có thể bị gán lại hay không.
Optional (?)
ts
{
: ;
?: ;
}
: = { : };
: = { : , : };
() {
u..;
u.?.;
}
Các modifier thuộc tính này kiểm soát việc một thuộc tính có bắt buộc hay không và có thể bị gán lại hay không.
?) {
: ;
?: ;
}
: = { : };
: = { : , : };
() {
u..;
u.?.;
}
Một thuộc tính optional có kiểu T | undefined, nên compiler buộc bạn xử lý trường hợp vắng mặt — ngăn các bug "cannot read property of undefined".
interface Point { readonly x: number; readonly y: number; }
const p: Point = { x: 1, y: 2 };
p.x = 5; // ❌ Lỗi: không thể gán cho thuộc tính readonly
// mảng cũng vậy
const nums: readonly number[] = [1, 2, 3];
nums.push(4); // ❌ push không tồn tại trên mảng readonly
readonly chỉ tồn tại lúc compile-time (không có cưỡng chế ở runtime), nhưng nó ghi rõ và cưỡng chế tính bất biến trong type system, bắt được các mutation vô tình.
interface Config { readonly id: string; tags?: readonly string[]; }
type Frozen = Readonly<User>; // utility type biến TẤT CẢ thuộc tính thành readonly
? mô hình hóa dữ liệu thực sự optional và buộc null-safety; readonly biểu đạt và cưỡng chế tính bất biến (rất tốt cho config, props và ngăn mutation state vô tình).
Cả hai đẩy việc kiểm tra tính đúng đắn vào compiler.
Thư viện câu hỏi phỏng vấn IT với đáp án chi tiết — từ Junior đến Senior.
Ủng hộ