Мой класс создан не экспортирует объект - PullRequest
0 голосов
/ 08 июня 2019

Мне нужно создать класс ShoppingCart в файле ShoppingCart.js и экспортировать его в тестовый файл, и я получаю сообщение об ошибке, что мой класс не является конструктором

Я знаю, что проблема не в импорте экспортапотому что перед созданием файла JS я получил ошибку, что он не может найти модуль.Я также попытался создать новый экземпляр класса внутри файла, и он работал

file ShoppingCart.js
class ShoppingCart{
    constructor(name){
        this.name=name
    }
}

module.exports = { ShoppingCart}

Код для моего тестового файла

 const ShoppingCart = require("./ShoppingCart")
 new ShoppingCart()

, когда я запускаю тестовый файл, который я получаю

TypeError: ShoppingCart is not a constructor

Ответы [ 2 ]

5 голосов
/ 08 июня 2019

Вы экспортируете объект со свойством из ShoppingCart:

module.exports = { ShoppingCart }
//               ^^   object   ^^

Просто экспорт ShoppingCart:

module.exports = ShoppingCart;

Или, при импорте, ссылаться на свойство ShoppingCart объекта:

const { ShoppingCart } = require("./ShoppingCart")
0 голосов
/ 08 июня 2019

Вы экспортируете объект со свойством ShoppingCart.

Либо:

  1. Измените экспорт на module.exports = ShoppingCart;, или

  2. Измените require на const { ShoppingCart } = require("./ShoppingCart");

Если вы используете современную версию Node.js, вы можете использовать ESM ( E CMA S cript M odules) вместо (export / import):

export class ShoppingCart{
    constructor(name){
        this.name=name
    }
}

и

import { ShoppingCart } from "./ShoppingCart.js";
new ShoppingCart();

При этом используются собственные модули JavaScript, а не вариант CommonJS Node.js.В течение новой пары лет это станет стандартным способом сделать это.На данный момент для использования ESM вы используете флаг --experimental-modules и package.json, содержащий type: "module".(Или вместо поля package.json type вы можете использовать расширение файла .mjs.) Подробности здесь .

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