ts中keyof的逻辑

interface Person {
name: string;
age: number;
}

type K1 = keyof Person; // "name" | "age"
type K2 = keyof Person[]; // "length" | "toString" | "pop" | "push" | "concat" | "join"
type K3 = keyof { [x: string]: Person }; // string | number

初学ts,K3的类型为什么是 string | number,K1和K2都理解,K3中keyof后的对象代表什么意思呢,求解答

key可以是string或者number。
明明声明的是为string,但是可以是number的原因是从JavaScript对象获取某个key的值时,会自动将键入的key转为字符串。