Estoy tratando de hacer una API simple usando TypeScript y typescript pero cuando ejecuto mi código NodeJS este error
"Este módulo se declara usando 'export =', y solo se puede usar con una importación predeterminada cuando se usa el indicador 'esModuleInterop'".
Este es mi código: paquete.json
{ "name": "API-Proyecto", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC", "dependencies": { "cors": "^2.8.5", "express": "^4.17.1", "jsonwebtoken": "^8.5.1" }, "devDependencies": { "@types/cors": "^2.8.6", "@types/express": "^4.17.6", "nodemon": "^2.0.4" } }Índice.ts
import express from 'express'; import { Request, Response } from 'express'; import cors from 'cors'; const app = express(); app.use(express.urlencoded({extended: true})); app.use(express.json); app.use(cors({origin: true, credentials: true})); app.get('/api/auth/testing', (req: Request, res: Response) =>{ res.status(200).json({ ok : true, msg : 'hi from my method' }); }); app.listen(3000, () => {console.log('Server running on 3000' )});tsconfig.json
{ "compilerOptions": { "target": "es6", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */ "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */ "outDir": "./dist", /* Redirect output structure to the directory. */ "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ } }FWIW, descubrí que cambiar de
import * as blah from 'blah-lib';Para
const blah = require('blah-lib');Se solucionó el problema en tiempo de compilación.
Resolví el problema compilando todo el archivo en lugar de compilar archivos individuales.
Simplemente ejecute el siguiente comando para compilar todo el archivo de una vez
npx tscEsto debería solucionar tu problema
Utilizar:
import * as express from 'express';No olvide configurar "moduleResolution": "node" en tsconfig.json si está utilizando node.
Mi problema fue que traté de ejecutar tsc como tsc -w index.ts .
Sin embargo, como se dice aquí https://stackoverflow.com/a/33244030/5711655 si ejecuta tsc con un archivo de entrada específico, ¡ no usará tsconfig.json en el directorio de su proyecto! Entonces, en mi caso, tuve que usar tsc -w .
Me preguntaba mucho pero un amigo me ayudó:
Paquete.json
{ "name": "api-proyecto", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", **"build-dev": "tsc -w"** }, "author": "", "license": "ISC", "devDependencies": { "@types/cors": "^2.8.6", "@types/express": "^4.17.6" }, "dependencies": { "cors": "^2.8.5", "express": "^4.17.1" } }Para ejecutar su script, debe escribir la siguiente línea
npm ejecuto build-dev (porque es el nombre de nuestro comando)
Finalmente en otro nodo de lanzamiento de powershell normalmente. Por ejemplo:
nodo .\dist\index.js
Tu código está perfectamente bien.
Cuando realiza cambios en tsconfig, a veces necesita reiniciar su IDE o Code Editor 🌹