无法使用Babel编译TypeScript单吨

时间:2018-07-03 12:19:16

标签: javascript typescript babel

在TypeScript中,Class具有private constructor(),因此我们可以像下面这样轻松地创建单调模式类。

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

  private constructor() {}
}

Singleton.instance.prop; // 0

当我使用不带TSC的Babel构建此TypeScript代码时,会引发错误Singleton is not a constructor。 我该怎么办?

2 个答案:

答案 0 :(得分:1)

我正在回答这个问题,因为几个小时后没有其他答案。我不是直接回答问题,但也可以是解决方案本身的答案。

在Node.js世界中,制作额外的单身人士没有任何意义。为什么?每个文件都是单例。

如果您的文件(模块)如下所示:

class Singleton {
  constructor() {}
}

exports.instance = new Singleton();

然后,您只能访问实例,基本上是单例。确实无法访问其他任何内容。

答案 1 :(得分:0)

我无法重现您的问题。使用此babelrc编译代码(在最后一行带有console.log):

{
  "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