Digamos que tenemos un código TypeScript que se ve así:
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];
}
Esto da error
Type 'string | number' is not assignable to type 'never'.
para la declaración
user1[key] = user2[key];
Si cambiamos la definición de keys
a
let keys: string[] = ["id", "name"];
el error desaparece, pero perdemos la seguridad del tipo.
¿Hay alguna forma de evitar este error sin dejar de mantener la seguridad de tipo?
let keys: string[]
presenta otro problema, pero sería un error en tiempo de ejecución (si la matriz contiene un nombre de campo no existente como valor). Lo que estamos buscando es una verificación en tiempo de compilación para evitarlo.
let keys: string[]
elimina el error pero introduce otro, ya que TS no puede garantizarlouser1[key]
ouser2[key]
es válido.