在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
。
我该怎么办?
答案 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