typescript 如何输入new Map([['1',()=>{}],[2,()=>{}])?我尝试Map〈string|number,()=>void>,但它抛出ts错误No overload matches

d8tt03nd  于 2023-04-07  发布在  TypeScript
关注(0)|答案(2)|浏览(109)
const a: Map<string | number, () => void> = new Map([
  [
    2,
    () => {
      console.log('a');
    },
  ],
  [
    '2',
    () => {
      console.log('a');
    },
  ],
]);

抛出以下错误TS2322:类型'Map〈number|(()=〉void),number|(()=〉void)〉'不能赋值给类型'Map〈string|数字,()=〉void〉'。 类型编号|(()=〉void)“"不能赋给类型"”string|数字'。 类型“()=〉void”不能分配给类型“string”|数字'。 类型“()=〉void”不能分配给类型“number”。
尝试使用联合类型Map〈NumberOrString,()=〉void〉,抛出相同的错误

4ioopgfo

4ioopgfo1#

问题出在数组的推断类型,即:

((number | (() => void))[] | (string | (() => void))[])[]

如果你将数组作为一个元组数组输入,Map会正确地推断出它自己的类型(TS Playground):

const arr: [string | number, () => void][] = [
  [
    2,
    () => {
      console.log('a');
    },
  ],
  [
    '2',
    () => {
      console.log('a');
    },
  ],
];

const a = new Map(arr);
w41d8nur

w41d8nur2#

const a = new Map<string | number, () => void>([
  [
    2,
    () => {
      console.log('a');
    },
  ],
  [
    '2',
    () => {
      console.log('a');
    },
  ],
]);

它无法推断类型,只是帮助它一点

相关问题