在Typescript声明文件中的工厂函数,包含和不包含new关键字

And*_*rew 8 javascript ecmascript-5 typescript

以下代码将在ES5中创建工厂函数:

function MyClass(val) {
    if (!(this instanceof MyClass)) {
        return new MyClass(val);
    }

    this.val = val;
}
Run Code Online (Sandbox Code Playgroud)

可以使用或不使用new关键字调用此函数:

var a = new MyClass(5);
var b = MyClass(5);
Run Code Online (Sandbox Code Playgroud)

这在Typescript中运行良好,但我无法弄清楚如何使用描述两种行为的合并来创建声明文件.有没有办法做到这一点?

Alu*_*dad 2

interface MyClass {
  val: {};     
}

interface MyClassConstructor {
  (val: {}): MyClass;
  new (val: {}): MyClass;
}

declare const MyClass: MyClassConstructor;
Run Code Online (Sandbox Code Playgroud)