Я мог бы сначала проверить существование полного пути, а затем получить к нему доступ. Если его там нет, то вы знаете, что вы можете go только до stageKey
, если он существует, в противном случае просто .data
.
if (stageKey && datasetType) {
return dataRefreshSpec?.data[stageKey][datasetType]
}
return stageKey ? dataRefreshSpec?.data[stageKey] : dataRefreshSpec?.data
Или вот так, если я получил новый синтаксис справа:
return dataRefreshSpec?.data?.[stageKey]?.[datasetType] ??
dataRefreshSpec?.data?.[stageKey] ??
dataRefreshSpec?.data
Или есть этот старый резерв, который, вероятно, будет работать, в зависимости от ваших требований:
return (((dataRefreshSpec || {}).data || {})[stageKey] || {})[datasetType]
Эти два последних технически немного отличаются, так как они не проверяйте значение самого ключа, а скорее его результат при применении его значения к объектам.