javascript - El módulo no tiene exportación por defecto después de convertir a Typescript
He convertido el código de JavaScript a TypeScript y estoy obteniendo el error
El módulo no tiene exportación por defecto
He intentado importar usando las llaves y exportar usando module.exports, pero ninguno de ellos funcionó.
contactController.ts
const contacts: String[] = [];
// Handle index actions
exports.index = (req: any, res: any) => {
res.json({
data: contacts,
message: "Contacts retrieved successfully",
status: "success"
});
};
// Handle create contact actions
exports.new = (req: any, res: any) => {
// save the contact and check for errors
contacts.push("Pyramids");
res.json({
data: contact,
message: "New contact created!"
});
};
api-ruta.ts
import contactController from "./contactController";
En el archivo api-routes.ts, cuando intento importar el módulo contactController, está generando el error
El módulo no tiene exportación por defecto
¿Cómo puedo importar sin el error? He intentado usar "import {contactController} from './contactController'" pero eso tampoco funcionó.
Respuesta #1
Documentación (vea las secciones "Exportar" e "Importar"): Documentación de módulos de Typescript.
Para completar la respuesta de Vasil:
Cuando importas un módulo de esta manera:
// <some_file>.ts
import <whatever_name_I_want> from "<path_to_my_awesome_module>";
<my_awesome_module>.ts necesita tener una exportación por defecto. Por ejemplo, esto se puede hacer de la siguiente manera:
// <my_awesome_module>.ts
export default foo = () => { // notice the 'default' keyword
// ...
};
export bar = () => {
// ...
};
Con el código anterior, <whatever_name_I_want> será el método foo (un módulo solo puede tener 1 exportación por defecto). Para importar también el método bar, tendrás que importarlo por separado:
// <some_file>.ts
import <whatever_name_I_want>, { bar } from "<path_to_my_awesome_module>";
Pero según lo que estás intentando hacer, probablemente no hay necesidad de usar una exportación por defecto. Simplemente podrías exportar todos tus métodos con la palabra clave export, así:
// contactController.ts
export index = (req: any, res: any) => { // no need for a default export
// ...
};
export create = (req: any, res: any) => {
// ...
};
e impórtalos a ambos ya sea entre corchetes:
// api-routes.ts
import { index, create } from "./contactController";
// Usage
index(...);
create(...);
o en una variable global:
// api-routes.ts
import * as contactController from "./contactController";
// Usage
contactController.index(...);
contactController.create(...);
PD: Renombré tu método new a create porque "new" ya es una palabra reservada en JavaScript.
Respuesta #2
Necesitas cambiar la forma en que exportas a:
const contacts: String[] = [];
// Handle index actions
const index = (req: any, res: any) => {
res.json({
data: contacts,
message: "Contacts retrieved successfully",
status: "success"
});
};
// Handle create contact actions
const newContact = (req: any, res: any) => {
// save the contact and check for errors
contacts.push("Pyramids");
res.json({
data: contact,
message: "New contact created!"
});
};
export default {index, newContact};
Entonces deberías poder importarlos así
import routes from './contactController';
