¿Cómo puedo acortar esa declaración if else?
const isPathPointAvailable = (requiredItems?: ModelTypes['Item'][], oneOfItems?: ModelTypes['Item'][]) => { if(requiredItems && requiredItems.length > 0){ return userHaveMultipleRequiredItems(requiredItems); } if(oneOfItems && oneOfItems.length > 0){ return userHaveRequiredItem(oneOfItems); } return trueIntenté esto pero siempre devuelve verdadero
const isPathPointAvailable = (requiredItems?: ModelTypes['Item'][], oneOfItems?: ModelTypes['Item'][]) => { requiredItems && requiredItems.length > 0 && userHaveMultipleRequiredItems(requiredItems); oneOfItems && oneOfItems.length > 0 && userHaveRequiredItem(oneOfItems); return true };Utilice el operador de encadenamiento opcional ?. para devolver el falso undefined si las matrices no están definidas. length === 0 también es falso.
const isPathPointAvailable = (requiredItems?: ModelTypes['Item'][], oneOfItems?: ModelTypes['Item'][]) => { if(requiredItems?.length) return userHaveMultipleRequiredItems(requiredItems); if(oneOfItems?.length) return userHaveRequiredItem(oneOfItems); return trueEstaba en el camino correcto con su segundo intento, pero le faltan las declaraciones de devolución en los ifs abreviados.
También podría usar una lambda simple para refactorizar esos dos controles más largos con algo como:
let hasElements = (arr) => arr && arr.length > 0; const isPathPointAvailable = (requiredItems?: ModelTypes['Item'][], oneOfItems?: ModelTypes['Item'][]) => { if( hasElements(requiredItems) ) return userHaveMultipleRequiredItems(requiredItems); if( hasElements(oneOfItems) ) return userHaveRequiredItem(oneOfItems); return true }