Object.assign 但如果名称冲突则抛出错误

Ale*_*lls 1 javascript node.js

有没有办法使用 Object.assign 以便在顶级属性发生冲突时抛出错误?或者我们必须手动编写我们的功能才能这样做?

jfr*_*d00 5

有没有办法使用 Object.assign 以便在顶级属性发生冲突时抛出错误?

不。您所要求的不是Object.assign().

或者我们必须手动编写我们的功能才能这样做?

是的,你必须自己写或者找别人已经写的东西。这是一个不同的函数,如果任何顶级源属性与目标上已有的属性匹配,则该函数将抛出。由于这不是 的行为Object.assign(),因此这是一个具有不同名称的新函数似乎很合适:

function mergeObjects(target, ...sources) {
    let originalProperties = new Set(Object.keys(target));
    // preflight for any top-level property name conflicts so we can throw before copying anything
    for (let src of sources) {
        for (let prop of Object.keys(src)) {
            if (originalProperties.has(prop)) {
                throw new Error(`target already has property ${prop}`);
            }
        }
    }
    return Object.assign(target, ...sources);
}
Run Code Online (Sandbox Code Playgroud)