使用ECMAScript 6,我可以这样编写:

const {
  a = mandatory('a'),
  b: {
    c = mandatory('c'),
    d = mandatory('d')
  } = mandatory('b')
} = { a: 'a', b: { c: 'c', d: 'd' } }
console.log(a, b, c, d)

function mandatory (field) {
  throw new Error(`Not giving you a ReferenceError today, but you must set a non-falsy value to "${field}"!`)
}


mandatory是一个使用“默认语法”的函数,如果将属性设置为虚假值,则打算抛出“已知”错误。

运行代码时,我得到一个ReferenceError: b is not defined。如果删除d: 'd',它突然不会再引发错误。

... = { a: 'a', b: { c: 'c' } }


它抛出一个期望的错误:

Error: Not giving you a ReferenceError today, but you must set a non-falsy value "d"!



如何定义b
如果mandatory设置为非伪造值,如何调用a.b并抛出自己的错误?

最佳答案

找到了解决方案。实际上,万一mandatory的值是假的,对我来说b函数调用是没有意义的。如果存在cd,则b不会伪造。

但是要定义b以便进一步处理,可以这样做:

const {
  a = mandatory('a'),
  b, // Added this line
  b: {
    c = mandatory('c'),
    d = mandatory('d')
  }
} = { a: 'a', b: { c: 'c', d: 'd'} }
console.log(a, b, c, d)

function mandatory (field) {
  throw new Error(`Not giving you a ReferenceError today, but you must set "${field}"!`)
}


这不再给出参考错误。

09-17 06:49