返回子类作为超类的类型

时间:2018-07-20 12:08:45

标签: typescript

我正在使用TypeScript和React;我想扩展一个基本组件,然后有一个返回许多子类之一的函数。

例如:

class SuperComponent extends React.Component { }

class SubComponent extends SuperComponent { }

function get(): SuperComponent {
    return SubComponent;
}

但是,TypeScript会引发以下错误:

  

错误TS2322:无法将类型'typeof SubComponent'分配给类型'SuperComponent'。     类型“子组件”的类型中缺少属性“ setState”。

似乎不是特定于React的,因为我可以很轻松地重现它:

class BaseClass {
    myMethod() {}
}

class SuperClass extends BaseClass {}

class SubClass extends SuperClass {}

function get2(): SuperClass {
    return SubClass;
}
  

错误TS2322:类型'typeof SubClass'无法分配给类型'SuperClass'。     类型“子类”的类型中缺少属性“ myMethod”。

这应该可行,对吧?我想念什么?

1 个答案:

答案 0 :(得分:3)

您需要实际创建组件的实例:

class SuperComponent extends React.Component { }

class SubComponent extends SuperComponent { }

function get(): SuperComponent {
    return new SubComponent({});
}

如果要返回组件的类型,则需要使用typeof SuperComponent作为返回类型:

function get(): typeof SuperComponent {
    return SubComponent;
}