Вы можете создать новый объект, разрушив obj1
и добавив к нему cities
.
obj1 = {
name: 'a',
age: '23'
};
obj2 = {
city1: 'x',
city2: 'y'
};
obj3 = {
...obj1,
cities: Object.entries(obj2)
.map(([k, v]) => ({[k]: v}))
};
console.log(obj3);
Вы не можете распаковать, по сути, но возможно это достигает того, что Вы хотите:
type First
type Second
type Element = (First, Second)
def get(x: First): Second
Я немного опоздал с этим, но как насчет использования сопоставления с образцом? Не имеет правильного возвращаемого типа, и мой синтаксис может быть немного неправильным, но вот:
def get[K](key: K): Iterable[Any] {
for ((key, x) <- elements) yield x
}
Это не распаковывает типы, но ограничивает типы A
и B
при вызове get
.
trait Container {
type Element
}
trait AssociativeContainer extends Container {
type Element <: Tuple2[_, _]
def get[A, B](x: A)(implicit ev: (A, B) =:= Element): B
}
Это выглядит многообещающе, но это обман - это не работает, если Element
является абстрактным.
def Unpack[T<:Tuple2[_, _]] = new {
def apply[A, B](implicit ev: T <:< (A, B)) = new {
type AA = A
type BB = B
}
}
trait AssociativeContainer {
type Element = (Int, String)
val unpacked = Unpack[Element].apply
type A = unpacked.AA
type B = unpacked.BB
1: A
"": B
def get(x: A): B
}