对象中Nullish coalescing operator失效,三元运算符正常,问题何在?
问题原因与解决办法
核心问题是运算符优先级差异:
??(空值合并运算符)的优先级比箭头函数=>高,导致你的代码被TypeScript错误解析。- 你写的代码:
实际被编译器解析成了:{ selector: extendedCallback.example ?? (element) => element.name }
这里{ selector: (extendedCallback.example ?? element) => element.name }element被当成了一个未声明的变量,所以触发Cannot find name 'element'.ts(2304)错误。
而三元运算符?:的优先级低于箭头函数,所以在三元写法里,箭头函数会被完整识别为一个回调分支:
'example' in extendedCallback ? extendedCallback.example : (element) => element.name
编译器能正确判断(element) => element.name是一个完整的函数,不会拆分解析。
两种可行的修复方式
- 给箭头函数套一层括号,明确它是一个整体:
{ selector: extendedCallback.example ?? ((element) => element.name) } - 提前定义默认回调函数,再用
??赋值:const defaultSelector = (element) => element.name; { selector: extendedCallback.example ?? defaultSelector }
内容的提问来源于stack exchange,提问作者supersize
相关产品推荐
相关产品推荐

