我尝试声明一个变量,其中映射中的每个键都是对象数组。由于某种原因,将值设为数组的行为会引发类型错误。
这是允许的:
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:数字; }”不可分配给类型“ {{a:number; }'
为什么允许第一段代码但不允许第二段代码?我希望可以在地图的每个键上使用不同的类型
答案 0 :(得分:1)
您的类型不一致。您可以明确告知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}]]