Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

269
Vistas
Nueva sintaxis es6 para importar módulos commonjs/amd, es decir, `import foo = require('foo')`

Anteriormente podía hacer:

 import foo = require('foo');

Pero ahora que TypeScript (1.5) admite la sintaxis del módulo es6, ¿cuál es la forma correcta de lograr lo mismo en la sintaxis del módulo ES6?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

La forma correcta es continuar usando la sintaxis de importación anterior. La nueva sintaxis de importación es solo para módulos ES, la antigua sintaxis de importación es para módulos anteriores a ES6. Los dos son distintos, intencionalmente. import * as foo from 'foo' importa todas las propiedades del módulo 'foo', no importa el valor predeterminado como foo .

Del diseñador de la función :

  • Una declaración predeterminada de exportación siempre declara un miembro exportado llamado predeterminado y siempre se emite como una asignación a exportaciones.default. En otras palabras, export default siempre tiene la semántica del módulo ES. Por compatibilidad con Babel, podríamos emitir opcionalmente un marcador __esModule cuando un módulo tiene una exportación predeterminada, pero en realidad no usaríamos ese marcador para nada.
  • Una declaración export = , que sustituye una entidad diferente para ser exportada en lugar del propio módulo, siempre se emite como una asignación a module.exports . Es un error tener otras exportaciones en un módulo que usa export = . Este es el comportamiento existente de TypeScript.
  • Un módulo que usa export = para exportar otro módulo (ya sea un módulo interno o externo) se puede importar usando las nuevas construcciones de ES6. En particular, las importaciones de desestructuración convenientes se pueden usar con dichos módulos. El patrón de usar export = para exportar otro módulo es común en archivos .d.ts que proporcionan una vista CommonJS/AMD de un módulo interno (por ejemplo, angular.d.ts).
  • Un módulo que usa export = para exportar una entidad que no es un módulo en lugar del propio módulo debe importarse usando la sintaxis import x = require("foo") existente, como es el caso actualmente.

Actualización de 2016: el compilador de TypeScript en algún momento comenzó a permitir import * as foo from 'legacy-module-foo' para obtener la importación predeterminada de un módulo heredado en ciertas circunstancias. Esto es una violación de la especificación ES6 ( §15.2.1.16 , "El valor "*" indica que la solicitud de importación es para el objeto de espacio de nombres del módulo de destino" .).

Cuando los módulos heredados que importa de esta manera se actualizan a módulos ES6, las importaciones "predeterminadas" para esos módulos dejarán de funcionar (porque * como se supone que las importaciones * as foo están importando objetos de espacio de nombres), lo que puede ser extremadamente confuso si no lo hace sepa que hacer esto es un truco de TypeScript/SystemJS. También es posible que una futura realineación de TypeScript a la especificación ES haga que se rompan.

Como tal, probablemente debería preferir continuar usando la sintaxis de importación heredada descrita anteriormente para cargar módulos heredados para evitar confundirse a sí mismo y a otros desarrolladores que trabajan en su código acerca de cómo funcionan las importaciones de espacios de nombres ES6, y para evitar confundir los cambios de última hora.

over 4 years ago · Santiago Trujillo Denunciar

0

La sintaxis correspondiente para la sintaxis del módulo ES6 es:

 import * as foo from 'foo';

Básicamente importa todo, desde el módulo foo a una variable local con el nombre foo .

over 4 years ago · Santiago Trujillo Denunciar

0

A partir de TypeScript 2.7 , hay una nueva esModuleInterop que se puede usar para habilitar las importaciones predeterminadas con CommonJS/AMD/UMD. Al establecer ese indicador en true en su tsconfig.json , esto debería funcionar como se esperaba:

 import foo from 'foo';
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda