Модуль не имеет экспорта по умолчанию после преобразования в Typescript - PullRequest
0 голосов
/ 26 апреля 2019

Я преобразовал код JavaScript в Typescript и получил ошибку

Модуль не имеет экспорта по умолчанию

Я пробовал импортировать с использованием фигурных скобок и экспортировать с помощью module.exports, но ни один из них не работал.

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-route.ts

import contactController from "./contactController";

В api-rout.ts, когда я пытаюсь импортировать модуль contactController, он выдает ошибку

Модуль не имеет экспорта по умолчанию

Как я могу импортировать без ошибки? Я пытался использовать "import {contactController} from" ./contactController ", но это также не сработало.

Ответы [ 2 ]

2 голосов
/ 26 апреля 2019

Документация (см. Разделы «Экспорт» и «Импорт»): Документация по печатным модулям .

Для завершения ответа Васила:

При импорте модуля следующим образом:

// <some_file>.ts
import <whatever_name_I_want> from "<path_to_my_awesome_module>";

<my_awesome_module>.ts должен иметь экспорт по умолчанию .Например, это можно сделать следующим образом:

// <my_awesome_module>.ts
export default foo = () => { // notice the 'default' keyword
  // ...
};

export bar = () => {
  // ...
};

С кодом, приведенным выше, <whatever_name_I_want> будет методом foo (модуль может иметь только 1 экспорт по умолчанию),Чтобы импортировать также метод bar, вам придется импортировать его отдельно:

// <some_file>.ts
import <whatever_name_I_want>, { bar } from "<path_to_my_awesome_module>";

Но в зависимости от того, что вы пытаетесь сделать, вам, вероятно, нет необходимости использоватьэкспорт по умолчанию.Вы можете просто экспортировать все свои методы с ключевым словом export, например:

// contactController.ts
export index = (req: any, res: any) => { // no need for a default export
  // ...
};

export create = (req: any, res: any) => {
  // ...
};

, и импортировать их оба в скобках:

// api-routes.ts
import { index, create } from "./contactController";

// Usage
index(...);
create(...);

или в глобальную переменную:

// api-routes.ts
import * as contactController from "./contactController";

// Usage
contactController.index(...);
contactController.create(...);

PS: я переименовал ваш метод new в create, потому что "new" уже является ключевым словом JavaScript.

2 голосов
/ 26 апреля 2019

Вам нужно изменить способ экспорта в:

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};

Тогда вы сможете импортировать, тогда вот так

import routes from './contactController';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...