¿Es posible usar tanto el nombre de la variable como la desestructuración en una sola instrucción en JavaScript/TypeScript?
Como esto:
function stopTheCar(car & { speed } : Car) { if (speed > 10) car.stop() }El mejor enfoque más cercano que conozco es usar la desestructuración en una instrucción separada:
function stopTheCar(car : Car) { const { speed } = car if (speed > 10) car.stop() }Pero esto introduce algunas limitaciones. En el caso de las funciones de flecha, los bloques son necesarios, lo que puede ser un inconveniente. Como esto:
cars.forEach(rect => { const { left, top } = rect return { left, top, intersection : rect.intersect(anotherRect), } })En lugar de esto:
cars.forEach(rect & { left, top } => ({ left, top, intersection : rect.intersect(anotherRect), }))No hay una buena manera. Lo más cerca que puede estar, similar a su primer bloque de código, es usando otro argumento (que no se pasa) que por defecto es el primero:
type Car = { speed: number; stop: () => void; } function stopTheCar(car: Car, { speed } = car) { if (speed > 10) car.stop() }Pero no recomendaría eso: sería muy confuso para los consumidores de la función ver dos argumentos posibles cuando realmente solo desea que se pase uno.
En cambio, desestructurar en la primera línea de la función es la mejor manera, incluso si requiere un poco de repetitivo.