types.reference
привязан к types.identifier
.Здесь вы, вероятно, неправильно поняли, что types.reference
ссылается на свойство types.identifier
данного узла, а не на сам узел.
Когда вы clone
, вы не изменяете id
оригиналаузел.types.reference
разрешается на лету из кэша идентификатора с помощью заданного id
, поэтому будет всегда ссылаться на узел с указанным id
.
Более того, учитывая, что идентификатор не можетпосле инициализации и что он должен быть уникальным для всего дерева узлов, я бы пришел к выводу, что узлы, имеющие свойство types.identifier
, не предназначены для клонирования с помощью утилиты clone
.
В качестве альтернативы, вы можете взятьснимок узла, который вы хотите клонировать, вручную обновите свойство types.identifier
и создайте из него новый узел.Что-то вроде:
const cloneWithNewId = (node, id) =>
getType(node).create(Object.assign({}, getSnapshot(node), { id }));