次のようなTypeScriptコードがあるとします。
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];
}
これはエラーになります
Type 'string | number' is not assignable to type 'never'.
ステートメントについて
user1[key] = user2[key];
の定義をkeys
toに変更すると
let keys: string[] = ["id", "name"];
エラーはなくなりますが、タイプセーフは失われます。
タイプセーフを維持しながらこのエラーを回避できる方法はありますか?
@VLAZはい、
—
Vaibhav K
let keys: string[]
別の問題が発生しますが、それは実行時エラーになります(配列に存在しないフィールド名が値として含まれている場合)。私たちが探しているのは、それを回避するためのコンパイル時チェックです。
let keys: string[]
はエラーを削除しますが、TSはそのことを保証できないuser1[key]
かuser2[key]
有効であるため、別のエラーを導入します。