我正在尝试创建一个循环遍历配置对象的递归函数,该对象包含必须设置的键,这与appConfig稍后进行比较,后者必须匹配内部的所有键(嵌套)unsetConfig
const _ = window._
const UNSET_CONFIG_VAR = 'UNSET'
let config = {
logging: {
hasConsole: UNSET_CONFIG_VAR,
hasSyslog: UNSET_CONFIG_VAR,
processName: UNSET_CONFIG_VAR,
inner: {
test: UNSET_CONFIG_VAR
}
}
}
const unsetConfig = _.clone(config)
function initialize (appConfig) {
const walkConfig = (currentConfigLevel, previousPaths = []) => {
for (const [key, value] of Object.entries(currentConfigLevel)) {
if (_.isObject(value)) {
previousPaths.push(key)
walkConfig(currentConfigLevel[key], previousPaths)
}
const path = previousPaths.length !== 0 ? previousPaths.join('.') : key
if (!_.get(appConfig, path)) {
throw new Error(`Config was missing: ${path}`)
}
}
}
walkConfig(unsetConfig)
}
initialize({
logging: {
hasConsole: true,
hasSyslog: true,
processName: true,
inner: {
as: true
}
}
})
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js"></script>
预期的输出将是抛出一个错误,正如您在initialize函数中看到的那样,test键在logging.inner.
但不会抛出任何错误。
我现在已经在不同的设置中尝试过,但我有点坚持。