En JavaScript puedo renombrar e importar el módulo de esta manera
import { original_name as alias_name } from 'my_module'¿Hay una buena explicación para la necesidad de como palabra clave y asentir simplemente siguiendo el excelente estándar de desestructuración?
¿Por qué no algo como esto:
import { original_name: alias_name } from 'my_module'Solo una curiosidad siempre me viene a la mente
La respuesta es, por supuesto, son diferentes porque hacen cosas diferentes y solo tienen similitudes en la sintaxis.
Pero tal vez haya una mejor razón por la que fueron diseñados de esa manera. Experimenté con los módulos de Node.JS de la siguiente manera:
// origin.js export let specialNumber = 2; setInterval(() => { specialNumber = Math.random(); }, 400) // importer.js import { specialNumber as aliasAttempt } from './origin.js' import * as StarImport from './origin.js' let { specialNumber: destructuringAttempt } = StarImport; setInterval(() => { console.log(aliasAttempt, destructuringAttempt); }, 400) Aquí, destructuringAttempt siempre dará "2" (el valor que obtuvo cuando fue desestructurado), mientras que aliasAttempt seguirá cambiando. Por ejemplo:
0.3600619094195876 2 0.33268826082163194 2 0.20684912705131553 2 0.8665522020482055 2 0.9349778920742413 2 Parece que destructuringAttempt se copió por valor durante la desestructuración, mientras que aliasAttempt mantiene la referencia a la variable let specialNumber .
(este comportamiento de destructuringAttempt se espera como let { specialNumber: destructuringAttempt } = StarImport; es exactamente lo mismo que let destructuringAttempt = StarImport.specialNumber; es decir, acaba de copiar el número)
Entonces, tal vez la razón fue que, si la exportación es un valor no constante, el 'aliasing' da un resultado diferente ("mantener la referencia a la otra variable") del comportamiento típico de desestructuración ("copiar una vez"), por lo tanto, es mejor distinguir las sintaxis.
Hacen cosas diferentes:
const , y posiblemente incluso un inicializador predeterminadoLa diferencia importante es que la desestructuración ejecuta código (prueba la coercabilidad de objetos, ejecuta captadores) mientras que las declaraciones de importación son totalmente declarativas (establecen dependencias entre módulos, lo que permite la elevación entre módulos incluso antes de que se inicialicen las variables). Esto hace que este último sea estáticamente analizable. Los alias de importación tampoco tienen concepto de objetos anidados.
Ambos permiten "cambiar el nombre", pero usan una sintaxis diferente para diferentes cosas; de lo contrario, habría sido demasiado confuso. El hecho de que sus formas abreviadas sean similares entre sí es principalmente una coincidencia, debido a que ambos usan llaves.