Angenommen, wir haben TypeScript-Code, der wie folgt aussieht:
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];
}
Dies gibt einen Fehler
Type 'string | number' is not assignable to type 'never'.
für die Aussage
user1[key] = user2[key];
Wenn wir die Definition von keys
zu ändern
let keys: string[] = ["id", "name"];
Der Fehler verschwindet, aber wir verlieren die Typensicherheit.
Gibt es eine Möglichkeit, diesen Fehler zu vermeiden, während die Typensicherheit erhalten bleibt?
let keys: string[]
führt ein weiteres Problem ein, aber das wäre ein Laufzeitfehler (wenn das Array zufällig einen nicht vorhandenen Feldnamen als Wert enthält). Was wir suchen, ist eine Überprüfung der Kompilierungszeit, um dies zu vermeiden.
let keys: string[]
entfernt den Fehler, führt aber einen anderen ein, da TS dies nicht garantieren kannuser1[key]
oderuser2[key]
gültig ist.