如何解决如何判断一个变量是否会在不抛出的情况下传播到散列中?
我想知道如果我在键值扩展构造中使用参数是否会抛出:
{ ...maybeIWillThrow }
我有一堆函数使用 spread 来简洁地实现“默认选项”行为,如下所示:
const DEFAULTS = { bells: true,whistles: true }
function doThing( arg1,options ) {
let effectiveOptions = { ...DEFAULTS,...options }
// do work...
}
现在我想返回并添加一些保护子句以防止使用非哈希 options
参数进行调用。使用 try/catch 感觉很笨拙,因为它需要两个代码块而不是一个,我更喜欢三元或单语句绕道:
let effectiveOptions = spreadsLikeButter(options)
? { ...DEFAULTS,...options }
: { ...DEFAULTS }
MDN 建议使用 testing for iterability is not right here(强调):
扩展语法(扩展属性除外)只能应用于可迭代对象
我知道我可以使用默认参数来防止 undefined
,但是如果调用者传递 5
或 true
,这将无济于事,而且我认为 typeof options === 'object'
也会产生许多误报(例如 Date
、Promise
)。
有没有一种简洁的方法来测试一个变量,看它是否会扩散到一个对象中而不抛出?
现在我将 try/catch 包装在 willItBlend( value: any ): boolean
中,但我希望在我更好地理解这一点后用更简洁的东西替换它。
此外,我知道我可以将所有合并默认值逻辑移动到一个单独的函数中,该函数可以隐藏混乱——在我的情况下,这可能是一个好主意——但出于学术目的,让我们专门关注如何测试一个变量以确定它是否会传播。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。