Не удалось скомпилировать однотонную версию TypeScript с помощью Babel - PullRequest
0 голосов
/ 03 июля 2018

В TypeScript класс имеет private constructor(), поэтому мы можем легко создавать однотонные классы шаблонов, как показано ниже.

class Singleton {
  static instance = new Singleton();
  prop = 0;

  private constructor() {}
}

Singleton.instance.prop; // 0

Когда я строю этот код TypeScript с использованием Babel без TSC, возникает ошибка Singleton is not a constructor. Что мне делать?

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Я не могу воспроизвести вашу проблему. Компиляция вашего кода (с console.log вокруг последней строки), с этим babelrc:

{
  "presets": [
    "@babel/preset-env",
    "@babel/preset-typescript"
],
  "plugins": [
    "@babel/proposal-class-properties",
    "@babel/proposal-object-rest-spread"
  ]
}

Возвращает следующий код, который работает, как и ожидалось:

"use strict";

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }

var Singleton = function Singleton() {
  _classCallCheck(this, Singleton);

  _defineProperty(this, "prop", 0);
};

_defineProperty(Singleton, "instance", new Singleton());

console.log(Singleton.instance.prop); // 0
0 голосов
/ 04 июля 2018

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

В мире Node.js не имеет смысла создавать дополнительные синглтоны. Зачем? Каждый отдельный файл является отдельным.

Если у вас есть файл (модуль), который выглядит так:

class Singleton {
  constructor() {}
}

exports.instance = new Singleton();

Тогда вы можете получить доступ только к экземпляру, который в основном одноэлементный. Нет другого способа получить доступ к чему-либо еще.

...