Giả sử chúng ta có mã TypeScript trông giống như:
type User = {
id: number,
name: string,
}
let user1: User = {id: 123, name: "Hello"};
let user2: User = {id: 456, name: "World"};
let keys: (keyof User)[] = ["id", "name"];
for (let key of keys) {
user1[key] = user2[key];
}
Điều này gây ra lỗi
Type 'string | number' is not assignable to type 'never'.
cho tuyên bố
user1[key] = user2[key];
Nếu chúng ta thay đổi định nghĩa keys
để
let keys: string[] = ["id", "name"];
lỗi sẽ biến mất, nhưng chúng ta mất loại an toàn.
Có một số cách chúng ta có thể tránh lỗi này trong khi vẫn duy trì an toàn loại?
let keys: string[]
giới thiệu một vấn đề khác, nhưng đó sẽ là lỗi thời gian chạy (nếu mảng xảy ra có chứa tên trường không tồn tại làm giá trị). Những gì chúng tôi đang tìm kiếm là một kiểm tra thời gian biên dịch để tránh nó.
let keys: string[]
không xóa lỗi nhưng giới thiệu một lỗi khác, vì không TS không thể đảm bảo rằnguser1[key]
hoặcuser2[key]
hợp lệ.