Tengo un archivo .ts en la aplicación node js (última versión de node.js para el 10/07/19) con la importación del módulo de nodo sin exportación predeterminada. Puedo usar esta construcción: import { Class } from 'abc';Cuando corro el código, tengo este error: Cannot use import statement outside a module.
En la red veo muchas soluciones para este problema (para .js), pero no me ayuda, tal vez porque tengo un archivo de mecanografía. Aquí está mi código:
import { Class } from 'abc';
module.exports = { ...
execute(a : Class ,args : Array<string>){ ...
Aquí está mi tsconfig.json:
{
"compilerOptions": {
"target": "es6",
"module": "commonjs",
"strict": true
}
}
typescript
ecmascript-6
Zerumi
fuente
fuente

importdeclaración la primera línea en su archivo?requirevsimport) utiliza. Solo para darle una idea de lo complicado que es esto, Node tiene cierta documentación sobreimportvsrequirey cómo hacer que funcionen juntos.module.exportssintaxis, probablemente no esté en un módulo ES6.execute(a : abc.Class...Respuestas:
Agregar
“type”: “module”a package.json le indicará a Node que está utilizando módulos ES2015, lo que debería eliminar el error, pero luego deberá indicar a Typecript que genere este tipo de módulo configurando en“module”: “es2015”lugar de“commonjs”tsconfig.json.Sin embargo, esto causa un problema con el código actual porque, aunque está utilizando una
import {}instrucción ES6 , está exportando utilizando lamodule.exports = {}sintaxis commonJS , y el cargador del módulo ES de Node tendrá un problema. Hay dos formas de lidiar con esto:module.exportsNodo pero dígale a Node que interprete este archivo como commonJS dándole una extensión .cjs .export function execute(…)..La primera opción podría ser un poco complicada porque el compilador generará archivos .js y tendrías que cambiarlo a .cjs todo el tiempo (que yo sepa). Con la segunda opción, debería poder ejecutar el archivo con Node (incluido el indicador --experimental-modules para las versiones <13.8).
Si absolutamente necesita usar commonJS, quizás sea mejor instalar las definiciones de tipo para Node: @ types / node y cambiar la importación al formato commonJS:
require('abc')y mantener el resto de la configuración como está (aunque puede agregar "type" : "Commonjs" a package.json para ser explícito).fuente