如何将类分配给“new()=>”的属性类型

时间:2018-05-31 06:58:15

标签: javascript reactjs typescript dependency-injection typeof

有一个层次结构

class Thing { }

class BarView<Type> extends React.Component<{ obj: Type }, {}> { }

class FlossView extends BarView<Thing> {  }

class Foo<Type> {
    renderer?: new () => BarView<Type>

    constructor(view?: new () => BarView<Type>) {
         this.renderer = view
    }
}

为什么我可以使用类名签名调用Foo的构造函数,而不会出现这样的错误

let foo = new Foo<Thing>(FlossView)

...而以下代码产生错误?

let foo = new Foo<Thing>()
foo.renderer = FlossView
/* [ts]
Type 'typeof FlossView' is not assignable to type 'BarView<Thing> | undefined'.
Type 'typeof FlossView' is not assignable to type 'BarView<Thing>'.*/

如何获取课程的typeof FlossView版本,而只是FlossView

1 个答案:

答案 0 :(得分:0)

案件结案。签名无效,最基类React.Component从未有过new () => React.Component类型的构造函数。

数字,只有一个带有一个参数props的构造函数。 因此renderer属性的类型声明无效。它应该是

renderer?: new (props) => BarView<Type>