打字稿映射类型意外值签名

时间:2020-12-27 18:03:58

标签: arrays typescript

为什么 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]]
}

Typescript Playground link

0 个答案:

没有答案