我在我的typescript来源中使用了一个映射类型,我在整个项目中都在重复使用:
type StringUnion = string | string[];
type StringUnionMap = { [key: string]: StringUnion };
我必须将其中两张地图合并为一张包含两者条目的地图:
let map1: StringUnionMap = { "key1": "value1", "key2": "value2" };
let map2: StringUnionMap = { "key3": [ "value3a", "value3b" ] };
我当然可以在这样的循环中实现我想要的东西:
let combinedMap: StringUnionMap = {};
for (let key in map1) {
combinedMap[key] = map1[name];
}
for (let key in map2) {
combinedMap[key] = map2[name];
}
我发现这种方式有点笨拙和冗长。有没有更简洁的方法来组合我的两张地图?
我试过这个,但那不是 compile transpile:
let combinedMap: StringUnionMap = new StringUnionMap( [ map1, map2 ] );
相应的JavaScript solution with Object.assign不起作用,因为我在启用noImplicitAny
的情况下定位ES5。因此Object.assign
is not available to me。
答案 0 :(得分:3)
Typescript 2.1允许您使用spread语法合并对象:
let combinedMap: StringUnionMap = {...map1, ...map2};
生成的代码将使用Object.assign
函数(如果可用)或提供polyfill:
var __assign = (this && this.__assign) || Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
var map1 = { "key1": "value1", "key2": "value2" };
var map2 = { "key3": ["value3a", "value3b"] };
var combinedMap = __assign({}, map1, map2);
答案 1 :(得分:0)
Typescript并没有为你提供这样的功能,但是javascript具有Object.assign功能,它可以完成你正在寻找的功能:
requirements = kivy,python3crystax