0
我正在用TypeScript重写一个旧的NPM模块,并且遇到了一个有趣的问题。如何在TypeScript中动态地将Class方法导出为独立函数?
的模块,在其目前的状态,看起来是这样的 -
1.1我-module.js
export function init(options) {
//initialize module
}
export function doStuff(params) {
//do stuff with options and other things
}
1.2example.js
var m = require('my-module');
m.init({thing: 'doodad'});
m.doStuff('bwoah');
我是在TS(目标ES6)重写本,并计划写的模块,可以采取一个构造函数(代替init()
)一类的,让我写得真好之类的东西 -
1.3例如,new.js
import {Thing} from 'my-module';
const aThing1 = new Thing({thing: 'doodad'});
const aThing2 = new Thing();
aThing2.init({thing: 'doodad'});
aThing1.doStuff('bwoah');
aThing2.doStuff('bwoah');
// If I can do at least one of aThing1 or aThing2, I can die a happy man.
重写的打字稿模块看起来是这样的 -
1.4我模块,new.js
class Thing {
options: Object;
constructor(options: Object) {
this.options = options;
}
init(options: Object) {
this.options = options;
return this;
}
doStuff(thingForStuff: string) {
// ...
}
}
我想达成什么
我希望保持与旧的API完全向后兼容,以及。所以理想情况下,我应该可以做1.2和1.3。
什么我试过到目前为止
export
荷兰国际集团的Thing
类;这让我做1.3,但不是1.2。export
ing单身人士,与export default new Thing()
;这让我做1.3,但不是1.2。写这样的事情 -
export class Thing { options: Object; constructor(options: Object) { this.options = options; } init(options: Object) { this.options = options; return this; } doStuff(thingForStuff: string) { // ... } } const singleThing = new Thing(); export function init(options) { return singleThing.init(options); } export function doStuff(string) { return singleThing.doStuff(string); }
这既1.2和1.3效果很好 - 但是这似乎有些单调乏味,基本复制每个功能。
当然,必须有一个更优雅的方式来做到这一点?