如果标题混淆,我很抱歉,我不完全确定如何更好地表达它。类型:JS模块导出类的实例的类型声明,类别的原型
我试图环绕的写作类型声明我的头通过试图产生一个this file(这是this npm module源),其中我基本上出口Eventer
类允许模块的实例为单还包含引用类来创建沙盒实例的属性。我正在使用Visual Studio代码来检查属性是否正确。该模块看起来是这样的:
// tiny-eventer.js
function Eventer() {
this.on = function (eventName, listener) { ... };
this.trigger = function (eventName, args) { ... };
}
Eventer.prototype.Eventer = Eventer;
module.exports = new Eventer();
在另一个模块,然后我可以通过要求其使用Singleton类eventer
实例,但也创造了沙盒实例调用new eventer.Eventer()
。
// index.js
var eventer = require('tiny-eventer');
var sandboxedEventer = new eventer.Eventer();
sandboxedEventer.on('an-event', function (args) { console.log('sandboxed ' + args); });
eventer.on('an-event', function (args) { console.log('global ' + args); });
eventer.trigger('an-event', 'is called');
// Prints to console: "global is called"
sandboxedEventer.trigger('an-event', 'is called');
// Prints to console: "sandboxed is called"
这基本上意味着这个可怕的代码是有效太:
// sorry.js
var eventer = require('tiny-eventer');
var otherEventer = new (new (new (new eventer.Eventer()).Eventer()).Eventer()).Eventer();
至于分型我已经试过如下:
declare module 'tiny-eventer' {
...
interface TinyEventItem { listener: (args) => void }
class Eventer {
// Doesn't seem to work as it should
Eventer: Eventer;
on(eventName: String, listener: (args) => void): TinyEventItem;
trigger(eventName: string, args: any): void;
}
export = new Eventer;
}
以上将与合作单身属性,如eventer.on
和eventer.trigger
,但似乎也允许eventer.Eventer.on
,因此new eventer.Eventer()
是不允许的。感觉就像我做错了。
我该如何得到关于编写一个类型属性引用自己的类的类型文件?