interface AgeMap {
[name: string]: number
}
const friendsAges: AgeMap = {
"Sandy": 34,
"Joe": 28,
"Sarah": 30,
"Michelle": "fifty", // ERROR! Type 'string' is not assignable to type 'number'.
};
Ở đây, giao diện AgeMap
thực thi các khóa dưới dạng chuỗi và giá trị dưới dạng số. Từ khóa name
có thể là bất kỳ định danh nào và nên được sử dụng để đề xuất cú pháp của giao diện / loại của bạn.
Bạn có thể sử dụng một cú pháp tương tự để thực thi rằng một đối tượng có một khóa cho mỗi mục trong loại kết hợp:
type DayOfTheWeek = "sunday" | "monday" | "tuesday" | "wednesday" | "thursday" | "friday" | "saturday";
type ChoresMap = { [day in DayOfTheWeek]: string };
const chores: ChoresMap = { // ERROR! Property 'saturday' is missing in type '...'
"sunday": "do the dishes",
"monday": "walk the dog",
"tuesday": "water the plants",
"wednesday": "take out the trash",
"thursday": "clean your room",
"friday": "mow the lawn",
};
Tất nhiên, bạn cũng có thể biến nó thành một loại chung chung!
type DayOfTheWeek = "sunday" | "monday" | "tuesday" | "wednesday" | "thursday" | "friday" | "saturday";
type DayOfTheWeekMap<T> = { [day in DayOfTheWeek]: T };
const chores: DayOfTheWeekMap<string> = {
"sunday": "do the dishes",
"monday": "walk the dog",
"tuesday": "water the plants",
"wednesday": "take out the trash",
"thursday": "clean your room",
"friday": "mow the lawn",
"saturday": "relax",
};
const workDays: DayOfTheWeekMap<boolean> = {
"sunday": false,
"monday": true,
"tuesday": true,
"wednesday": true,
"thursday": true,
"friday": true,
"saturday": false,
};
Cập nhật ngày 10.10.2018:
Kiểm tra câu trả lời của @ dracstaxi bên dưới - giờ đây đã có loại tích hợp sẵn Record
mà hầu hết điều này giúp bạn.
Cập nhật 1.2.2020:
Tôi đã loại bỏ hoàn toàn các giao diện ánh xạ được tạo sẵn khỏi câu trả lời của tôi. @ dracstaxi's câu trả lời làm cho chúng hoàn toàn không liên quan. Nếu bạn vẫn muốn sử dụng chúng, hãy kiểm tra lịch sử chỉnh sửa.