为什么 Array.push 有签名 A & B
而不是预期的 A | B
type A = { a: unknown };
type B = { b: unknown };
type MyType = {
numbers: A;
strings: B;
};
type Arrayed<T> = {
[K in keyof T]: T[K][];
};
type MyArrayed = Arrayed<MyType>;
const arrayed: MyArrayed = {
numbers: [],
strings: [],
};
function push<K extends keyof MyArrayed>(key: K, value: MyArrayed[K][0]) {
// why does .push has A & B signature?
arrayed[key].push(value);
// this fails too
arrayed[key] = [...arrayed[key]]
}