Một index signature mô tả kiểu của các thuộc tính khi bạn không biết trước tên của chúng — mô hình hóa dictionary/map nơi các key là động.
{
[: ]: ;
}
: = { : , : };
scores. = ;
scores.;
scores.;
Một index signature mô tả kiểu của các thuộc tính khi bạn không biết trước tên của chúng — mô hình hóa dictionary/map nơi các key là động.
{
[: ]: ;
}
: = { : , : };
scores. = ;
scores.;
scores.;
Với một index signature thông thường, compiler giả định mọi key đều tồn tại, nên scores.typo được type là number ngay cả khi nó thực ra là undefined ở runtime. Bật noUncheckedIndexedAccess sẽ khắc phục điều này:
// với noUncheckedIndexedAccess: true
scores.math; // number | undefined → buộc bạn xử lý trường hợp thiếu
interface Config {
name: string; // thuộc tính đã biết
[key: string]: string | number; // cộng thêm các key bất kỳ
}
Tất cả thuộc tính có tên phải gán được vào kiểu giá trị của index signature.
type Scores = Record<string, number>; // giống index signature
type Roles = Record<"admin" | "user", boolean>; // key bị ràng buộc
Record là cách viết tắt idiomatic và hỗ trợ một union key bị giới hạn, điều mà [key: string] thuần không làm được.
Index signature mô hình hóa các object thực sự có key động (lookup table, cache, map JSON đã parse).
Hãy biết về lưu ý an toàn (noUncheckedIndexedAccess) và ưu tiên Record<K, V> để dễ đọc — và ưu tiên Map khi các key thực sự mở rộng tùy ý và bạn muốn ngữ nghĩa iteration/size thực sự.
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ộ