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

问题描述 投票:0回答:1
const a: Map<string | number, () => void> = new Map([
  [
    2,
    () => {
      console.log('a');
    },
  ],
  [
    '2',
    () => {
      console.log('a');
    },
  ],
]);

抛出以下错误 TS2322: 类型 'Map void), number | (() => void)>' 不可分配给类型 'Map void>'。输入'数字| (() => void)' 不可分配给类型 'string |数字'。类型 '() => void' 不可分配给类型 'string |数字'。类型 '() => void' 不可分配给类型 'number'。

尝试使用联合类型Map void>,抛出同样的错误

typescript dictionary union
1个回答
0
投票

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

((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);
© www.soinside.com 2019 - 2024. All rights reserved.