Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

264
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!