Typescript 为什么此映射声明会引发类型错误?

Typescript 为什么此映射声明会引发类型错误?,typescript,maps,Typescript,Maps,我尝试声明一个变量,其中映射中的每个键都是一个对象数组。出于某种原因,将值设置为数组的行为会引发类型错误 这是允许的: var map = new Map([ ['a', {c: 1}], ['b', {c: 1, d: 1}] ]) 这是不允许的: var map = new Map([ ['a', [{c: 1}]], ['b', [{c: 1, d: 1}]]

我尝试声明一个变量,其中映射中的每个键都是一个对象数组。出于某种原因,将值设置为数组的行为会引发类型错误

这是允许的:

var map = new Map([
            ['a', {c: 1}],
            ['b', {c: 1, d: 1}]
        ])
这是不允许的:

var map = new Map([
            ['a', [{c: 1}]],
            ['b', [{c: 1, d: 1}]]
        ])
第二段代码将抛出以下错误: 类型“{a:number;b:number;}”不能分配给类型“{a:number;}”


为什么第一段代码是允许的,而第二段代码是不允许的?我希望我的地图的每个键上都有不同的类型

您的类型不一致。您可以显式地告诉Map它将拥有的类型

interface MapValue {
  c: number;
  d?: number;
}

const map = new Map<string, MapValue[]>([
  ['a', [{ c: 1 }]],
  ['b', [{ c: 1, d: 1 }]]
])

// or

interface MapValue {
  c: number;
  d: number;
}

const map = new Map<string, MapValue[]>([
  ['a', [{ c: 1 } as MapValue]],
  ['b', [{ c: 1, d: 1}]]
接口映射值{
c:数字;
d:数字;
}
常量映射=新映射([
['a',[{c:1}]],
['b',[{c:1,d:1}]]
])
//或
接口映射值{
c:数字;
d:数字;
}
常量映射=新映射([
['a',[{c:1}作为映射值]],
['b',[{c:1,d:1}]]