Type ...不是构造函数类型

时间:2017-04-25 04:39:29

标签: typescript

我编写了一些在操场上工作的代码来创建一个交集类型,允许使用new创建一个类型,或者调用构造函数。这在游乐场很好用:

module Test {
    export interface IType<TType> {
        new (...args: any[]): TType;
    }

    export interface ICallableType<TInstance, TType extends IType<TInstance>> {
        (): TInstance;
        new (): TInstance;
    }

    class $MyObject extends Object { // ('Object' is here just as an example)
        static abc = 1;
        x = 1;
        y = 2;
    }

    function registerClass<TInstance, TType extends IType<TInstance>>(_type: TType)
    : ICallableType<TInstance, TType> & TType
    {
        return null;
    }

    export var MyObject = registerClass<$MyObject, typeof $MyObject>($MyObject);

    var o = MyObject();
    o.x = 1;

    export class $TestA extends MyObject {
        a = 3;
    }
    var TestA = registerClass<$TestA, typeof $TestA>($TestA);
    var a = TestA();

    export class $TestB extends TestA {
        b = 4;
    }
    var TestB = registerClass<$TestB, typeof $TestB>($TestB);
    var b = TestB();
}

see here

使用带有最新更新的VS 2017,这根本不起作用。 $TestA extends MyObjectType ICallableType<TInstance, TType> & TType is not a constructor function失败。有什么想法吗?操场似乎有点旧版本,这是一个突破性的变化还是什么?

1 个答案:

答案 0 :(得分:1)

好的,这适用于Typescript v2.2,所以看起来游乐场至少是v2.2。 Visual Studio 2017(v15.1 / 26403.7)为stuck at Typescript v2.1.5 at the moment,但preview中提供了v2.2。

如果有兴趣,可骂课堂讨论在这里:https://github.com/Microsoft/TypeScript/issues/183#issuecomment-296916884

更新:请记住,ES6类具有&#34;专门化功能&#34;,您将无法再简单地调用类构造函数。